shell脚本中$ @和$ *有什么区别?
在shell脚本中, $@
和$*
什么区别?
哪一个是获得脚本参数的首选方法?
不同的shell解释器在这方面有差异吗?
从这里 :
$ @的行为与$ *相似,除了引用时,如果参数中有空格,则正确地分解参数。
以这个脚本为例(取自链接的答案):
for var in "$@" do echo "$var" done
给出这个:
$ sh test.sh 1 2 '3 4' 1 2 3 4
现在将"$@"
更改为$*
:
for var in $* do echo "$var" done
你得到这个:
$ sh test.sh 1 2 '3 4' 1 2 3 4
(通过使用Googlefind答案)
与我的POV的主要区别是“$ @”保留了原始的参数数量。 这是唯一的forms。 出于这个原因,在脚本中传递参数非常方便。
例如,如果文件my_script包含:
#!/bin/bash main() { echo 'MAIN sees ' $# ' args' } main $* main $@ main "$*" main "$@" ### end ###
我像这样运行它:
my_script 'abc' de
我会得到这个输出:
主要看到5个参数
主要看到5个参数
主要看到1个参数
主要看到3个参数
使用$ @每个参数都是一个带引号的string。 否则,它的行为是一样的。
请参阅: http : //tldp.org/LDP/abs/html/internalvariables.html#APPREF