次の例では、変数{_,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
最初のパラメータであるスクリプト自体。 $1
2番目のパラメータ(bashは0から計算し、人間は1から計算を開始するため、1と呼ばれる)のxです。
$_
特定の位置パラメータではなく、実行中のコマンドのフルパスで始まりますが、拡張後に前のコマンドの最後のパラメータ値になる特別なパラメータであるため、少し奇妙です。これが最初の実行と同じ理由です$0
。一方、2番目の実行では、スクリプトを取得すると、その値x
(ソースから解釈された前のコマンドの最後のパラメータ)に展開されます。
これについて詳しくは、bashのマニュアルを読んでください。セクション3.4.1:位置パラメータ
次のセクション3.4.2では$_
。