bashの$_と$0はどういう意味ですか? [コピー]

bashの$_と$0はどういう意味ですか? [コピー]

次の例では、変数{_,0}を理解するのに問題があります。

スクリプトからtmp.sh

func() 
{
echo $_
echo $0
echo $1
}

パラメータxを使用してtmp.shを呼び出します。

~$ ./tmp.sh x
./tmp.sh
./tmp.sh
x

そして、パラメータxを使ってtmp.shを取得します。

~$ . ./tmp.sh x
x
bash
x

私が理解している限り$_$0最初の例に示すように、後者は最初のパラメータとして使用されます./tmp.sh。 2番目の例では、bashと同じ理由は何ですか?

なぜ拡張すると、.前者はソースなしのbashの$ 0に対応するソースbashの最後の引数を返します。そうですか?

ベストアンサー1

Nが数値のときに参照される変数は、$Nスクリプトの位置引数です。 $0最初のパラメータであるスクリプト自体。 $12番目のパラメータ(bashは0から計算し、人間は1から計算を開始するため、1と呼ばれる)のxです。

$_特定の位置パラメータではなく、実行中のコマンドのフルパスで始まりますが、拡張後に前のコマンドの最後のパラメータ値になる特別なパラメータであるため、少し奇妙です。これが最初の実行と同じ理由です$0。一方、2番目の実行では、スクリプトを取得すると、その値x(ソースから解釈された前のコマンドの最後のパラメータ)に展開されます。

これについて詳しくは、bashのマニュアルを読んでください。セクション3.4.1:位置パラメータ

次のセクション3.4.2では$_

おすすめ記事