ドットを使用してシェルスクリプトを実行する「echo$0」が-bashを出力する理由
以下のコードスニペットがあると仮定します
#!/usr/bin/env bash
echo $0
ドット(。)を使用して実行します
. ./script.sh
出力:
-bash
でも、
ドットなしで実行した場合
出力は、予想どおり、パス名とスクリプト名を組み合わせたものです。
スクリプトをソーシングするexecと、新しいインタープリターではなく既存のインタープリターで実行されます。つまり、$0通常どおりに初期化されません。
を使用してスクリプトを実行すると.、基本的には、シェルコマンドラインでスクリプトの内容を直接入力した場合と同じです。したがってecho "$0"、入力しただけの場合とまったく同じように出力されます。
のような特別な変数$0は、新しいシェルを起動したときにのみ初期化されますが.、そうでない場合はあまり役に立ちません。
ただし、bashバージョン3以降を使用している場合は、現在実行されているファイルをいつでも確認できます。
echo "$BASH_SOURCE"
これは、ファイルがどのように呼び出されても機能します。
.のエイリアスですsource:
このコマンドは、スクリプトの実行には使用しないでください。ソース ファイルをインポートするために作成されています。
ここでそれを見ることができます:高度なBashスクリプトガイド