1. ホーム
  2. linux

[解決済み】シェルスクリプトの$@はどういう意味ですか?

2022-03-30 09:44:26

質問

ドル記号の後にアットマークを付けるとどうなるのか( @ は、シェルスクリプトの中でどのような意味を持つのでしょうか?

例えば

umbrella_corp_options $@

解決方法は?

$@ とほぼ同じです。 $* どちらも「すべてのコマンドライン引数」という意味です。 これらはしばしば、単にすべての引数を他のプログラムに渡すために使われます(したがって、その他のプログラムの周りにラッパーを形成します)。

この2つの構文の違いは、スペースが含まれる引数(例)を持つ場合に現れます。 $@ を二重引用符で囲んでください。

wrappedProgram "$@"
# ^^^ this is correct and will hand over all arguments in the way
#     we received them, i. e. as several arguments, each of them
#     containing all the spaces and other uglinesses they have.
wrappedProgram "$*"
# ^^^ this will hand over exactly one argument, containing all
#     original arguments, separated by single spaces.
wrappedProgram $*
# ^^^ this will join all arguments by single spaces as well and
#     will then split the string as the shell does on the command
#     line, thus it will split an argument containing spaces into
#     several arguments.

例 呼び出し

wrapper "one two    three" four five "six seven"

になります。

"$@": wrappedProgram "one two    three" four five "six seven"
"$*": wrappedProgram "one two    three four five six seven"
                             ^^^^ These spaces are part of the first
                                  argument and are not changed.
$*:   wrappedProgram one two three four five six seven