web-dev-qa-db-ja.com

Bashの$ @とは何ですか?

シェルスクリプトのハンドル$@は、スクリプトに指定されたすべての引数の配列であると考えています。これは本当ですか?

私は通常、検索エンジンを使用して情報を収集しているので尋ねますが、$@を検索することはできません。

155
vecvan

はい。 bashのmanページ (最初に行くこと)のSpecial Parametersをご覧ください。

特別なパラメーター

シェルはいくつかのパラメーターを特別に扱います。これらのパラメーターは参照のみ可能です。それらへの割り当ては許可されていません。

*は、1から始まる定位置パラメーターに展開します。二重引用符内で展開すると、各パラメーターの値がIFS特殊変数の最初の文字で区切られた単一のWordに展開されます。つまり、"$*""$1c$2c..."と同等です。ここで、cはIFS変数の値の最初の文字です。 IFSが設定されていない場合、パラメーターはスペースで区切られます。 IFSがヌルの場合、パラメーターはセパレーターを介さずに結合されます。

@は、1から始まる定位置パラメーターに展開します。二重引用符内で展開すると、各パラメーターが個別のWordに展開されます。つまり、"$@""$1""$2"と同等です...二重引用符で囲まれた展開がWord内で発生する場合、最初のパラメーターの展開は元のWordの開始部分と結合され、最後のパラメーターの展開は結合されます元のWordの最後の部分。位置パラメータがない場合、"$@"$@は何も展開されません(つまり、削除されます)。

117
ghostdog74

"$@"が個別のパラメーターのリストに展開されることを理解できなかったことを読んだだけです。一方、"$*"は、追加されたすべてのパラメーターで構成される1つのパラメーターです。

それでも意味をなさない場合は、これを実行します。

http://www.thegeekstuff.com/2010/05/bash-Shell-special-parameters/

35