シェル スクリプトの $* の意味は何ですか?

シェル スクリプトの $* の意味は何ですか?

シェル スクリプト ファイルで「$*」を見ましたが、これはどういう意味ですか。また、いつ使用する必要がありますか。

答え1

からbash(1)

特別なパラメータ

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

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

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

基本的に、 は、$*スクリプト (またはシェル関数) のパラメータを値とする特殊な変数です。ほとんどの場合、"$@"の方が適切です。

答え2

これは、スクリプトに渡されるすべてのパラメータに対応します。例では、引用符で囲まれています。引用符はパラメータ間の (おそらく) 空白をカプセル化するため、これは重要です。シェル スクリプトで引用符を省略すると、バグの原因になることがよくあります。

以下は bash の場合で、man ページから引用したものです。

 *      Expands to the positional parameters, starting from one.  When the expansion  occurs
          within  double  quotes, it expands to a single word with the value of each parameter
          separated by the first character of the IFS special  variable.   That  is,  "$*"  is
          equivalent  to  "$1c$2c...",  where c is the first character of the value of the IFS
          variable.  If IFS is unset, the parameters are separated by spaces.  If IFS is null,
          the parameters are joined without intervening separators.

乾杯

sc. スク。

関連情報