shell脚本中的$ @和$ *有什么区别?

时间:2010-05-03 22:49:13

标签: shell scripting

在shell脚本中,$@$*之间的区别是什么?

哪一个是获取脚本参数的首选方法?

不同的shell解释器之间是否存在差异?

3 个答案:

答案 0 :(得分:59)

来自here

  

$ @的行为类似于$ *,除非引用参数,如果它们中有空格,则正确分解。

以此脚本为例(取自链接的答案):

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

(使用Google找到答案)

答案 1 :(得分:13)

与我的POV的区别在于“$ @”会保留原始号码 论点。这是唯一的形式。因为这个原因 非常方便用脚本传递args。

例如,如果文件my_script包含:

#!/bin/bash

main()
{
   echo 'MAIN sees ' $# ' args'
}

main $*
main $@

main "$*"
main "$@"

### end ###

我按照这样运行:

my_script 'a b c' d e

我会得到这个输出:

MAIN看到5个args

MAIN看到5个args

MAIN看到1个args

MAIN看到3个args

答案 2 :(得分:0)

使用$ @,每个参数都是带引号的字符串。否则它的行为相同。

请参阅:http://tldp.org/LDP/abs/html/internalvariables.html#APPREF