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
$@
$*
相同,都表示“所有命令行参数”。它们通常用于简单地将所有参数传递给另一个程序(从而形成围绕该其他程序的包装器)。当您有一个带有空格的参数(例如)并将
$@
放在双引号中时,两种语法之间的差异就会出现:示例:调用
将导致: