
シンプルなスクリプトを用意する:
echo "file: $0"
次のように呼び出された場合:
bash スクリプト
または
./myscript.sh
スクリプトのファイル名 ( file: myscript.sh
) は期待どおりに返されますが、呼び出されると次のようになります。
ソース myscript.sh
または
。 ./myscript.sh
bash
スクリプトファイル名の代わりにシェル名 ( ) を指定します。
なぜこうなるのでしょうか?
答え1
最初の呼び出しでは、スクリプトを解釈するために bash の新しいインスタンスが開始され、bash が$0
そのパスに設定されます。
2 回目の呼び出しでは、ファイルを実行可能ファイルとして扱い、それを実行するので、$0
そのファイルを指します。
最後の 2 つの呼び出しは、ファイルを bash の現在のインスタンスにロードし、$0
そこを指します。
注意: #2 ではファイルが実行可能である必要がありますが、#1、#3、#4 では必要ありません。