在shell脚本中,美元符号后跟at符号(@)是什么意思?
例如:
umbrella_corp_options $@发布于 2012-04-03 22:26:30
$@与$*几乎相同,都意味着“所有命令行参数”。它们通常被用来简单地将所有参数传递给另一个程序(从而在另一个程序周围形成一个包装器)。
当你有一个包含空格的参数时,这两种语法之间的差异就会显现出来(例如)并将$@放在双引号中:
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发布于 2013-10-22 23:21:20
以下是命令行参数,其中:
$@ =将所有参数存储在字符串列表中
$* =将所有参数存储为单个字符串
$# =存储参数的数量
发布于 2012-04-03 21:34:08
在大多数情况下,使用纯$@意味着“尽可能地伤害程序员”,因为在大多数情况下,它会导致单词分隔以及参数中的空格和其他字符的问题。
在(猜测) 99%的情况下,需要将其包含在"中:"$@"可用于可靠地迭代参数。
for a in "$@"; do something_with "$a"; donehttps://stackoverflow.com/questions/9994295
复制相似问题