在shell脚本中,美元符号后面跟着一个at符号(@)是什么意思?
例如:
umbrella_corp_options $@
在shell脚本中,美元符号后面跟着一个at符号(@)是什么意思?
例如:
umbrella_corp_options $@
当前回答
$@基本上用于引用shell-script的所有命令行参数。 $1, $2, $3是第一个命令行参数,第二个命令行参数,第三个参数。
其他回答
它们通常用于简单地将所有参数传递给另一个程序
[root@node1 shell]# ./my-script hi 11 33 嗨11 33 [root@node1
$@基本上用于引用shell-script的所有命令行参数。 $1, $2, $3是第一个命令行参数,第二个命令行参数,第三个参数。
$@与$*几乎相同,都表示“所有命令行参数”。它们通常用于简单地将所有参数传递给另一个程序(从而形成了对其他程序的包装)。
这两种语法之间的差异体现在你有一个带空格的参数(例如),并把$@放在双引号中:
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
纯$@的使用在大多数情况下意味着“尽可能地伤害程序员”,因为在大多数情况下,它会导致单词分离、空格和参数中的其他字符的问题。
在(猜测的)99%的情况下,需要将它括在"中:"$@"是可以用于可靠地遍历参数的。
for a in "$@"; do something_with "$a"; done
的意思。
简而言之,$@扩展为从调用者传递给函数或脚本的参数。它的含义与上下文相关:在函数内部,它扩展为传递给该函数的参数。如果在脚本中使用(在函数之外),则扩展为传递给该脚本的参数。
$ cat my-script
#! /bin/sh
echo "$@"
$ ./my-script "Hi!"
Hi!
$ put () { echo "$@"; }
$ put "Hi!"
Hi!
*注意:分词。
shell根据IFS环境变量的内容拆分令牌。默认值为\t\n;即,空格、制表符和换行符。展开“$@”可以得到传入参数的原始副本。扩展$@可能不会。更具体地说,任何包含IFS中出现的字符的参数都可能分裂为两个或多个参数或被截断。
因此,大多数时候你想要使用的是“$@”,而不是$@。