また、一部の古い Unix ライクなシステムでは空白が許可されていなかったという漠然とした記憶もありますが、少しの調査ではそれがサポートされていません。
このウィキペディアの記事によると、この#!
構文は 1980 年 1 月にバージョン 8 Unix で導入されました。デニス リッチーによるこの機能の最初の発表では、次のように述べられています。
実行中のファイルがマジック文字で始まる場合#!
、行の残りの部分が実行されたファイルのインタープリターの名前であると理解されるように、システムが変更されました。以前は (実際には今も) シェルがこの仕事の多くを行っていました。テキスト ファイルの名前がコマンドとして入力されると、実行可能モードでテキスト ファイルに対して自動的に実行されます。設備をシステム化することで、以下のメリットが得られます。
[をちょきちょきと切る]
この素晴らしい機会を利用するには、
#! /bin/sh
シェルスクリプトの最初の行の左マージンに。後の空白!
はOKです。完全なパス名を使用します (検索は行われません)。現時点では、行全体が 16 文字に制限されていますが、この制限は引き上げられる予定です。
後の Unix ライクなシステムでは#!
構文はサポートされていたものの、 の後の空白は許可されていなかったと考えられますが!
、最初の実装では空白が明示的に許可されていたことを考えると、それはありそうにありません。
leonbloy's answer は、さらにコンテキストを提供します。
アップデート :
#!
Perl インタープリター自体は、カーネルによって認識されないシステム上でも、 で始まる行を認識します。詳細については、この Web ページを実行perldoc perlrun
するか、参照してください。
#! 行が解析されているため、行は常にスイッチについて調べられます。したがって、 #! 行、またはさらに悪いことに、#! さえ認識しません。プログラムの先頭を見つけるために -x が使用されたとしても、Perl がどのように呼び出されたかに関係なく、一貫したスイッチ動作を得ることができます。
Perl は . の後の空白も許可します#!
。
(個人的には、#!
空白なしで行を書くことを好みますが、どちらの方法でも機能します。)
そして、leonjoy の回答は、Sven Mascheck によるこの Web ページを指しています。深く。(comp.unix.shell に関する最近の議論のため、今これについて言及します。)