引数を別のダウンストリーム「呼び出し可能」(バイナリ、スクリプト、関数など)に「渡す」必要なスクリプト(または関数)を作成するたびに、次のように引数を渡すfoo
コードを作成します。
foo "$@"
...しかし、この代替案も見たことがあります。
foo "$@[@]"
zsh
私はこれら2つの方法が異なる結果を生み出しますが、成功しないシナリオを作成しようとしました(少なくとも成功しませんでした)。
本当に同義ですか?そうでなければ、人々はいつ他のフォームよりも1つのフォームを好むでしょうか?
zsh
(私はこれが日常的なシェルである状況に主に興味がありますが、仕事ではスクリプトを書く必要があることが多いので、bash
この質問に対する答えも疑問に思います。)bash
ベストアンサー1
"$@"
Bourne Shell(1979)の発明品です。これは、入力したように位置引数のリストに展開されることを意味します"$1" "$2" "$3"...
。
David Kornは、1980年代初めに配列サポートを追加したときに構文を使用して概念を配列に拡張しました"${array[@]}"
。より短いフォーマットzsh
もサポートされています。"$array[@]"
"$@"
$1
配列と少し似ていますが、またはzsh
を除いてyash
完全に同じではない位置パラメータ(最初から)を示します。 1つは$@
インデックス1から始まり、もう1つの配列は0から始まりksh
ますbash
。またはでは動作しません${@[@]}
。ksh
bash
唯一の"${@[@]}"
利用できるシェルはzsh
およびですyash
。動作するzsh
唯一のものです"$@[@]"
。標準以上で使用することは意味がありません"$@"
。より有用な説明は次のとおりです。"$@[1,3]"
最初の3つの位置パラメータを取得します。
配列に似た構文を使用するにはzsh
( // など"$argv[@]"
の$argv
位置パラメータを参照する配列csh
)で使用できます。tcsh
fish