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