Bash中$ *和$ @之间的差异

时间:2016-05-06 01:30:43

标签: bash shell

谁可以帮助提供一个shell脚本示例来显示$*$@之间的区别?

以下是我的脚本,它无法区分。有谁可以举个好榜样?

$ cat internalVar.sh 
#!/bin/bash
# internalVar.sh var1 var2
echo "\$? = " $?
export IFS="_"
echo "\$@ = " $@ " == several parameters?"
j=1
for i in $@
do
    echo "var $j = $i"
    j=$((j+1))
done
echo "\$* = " $* " == a single string"
j=1
for i in $*
do
    echo "var $j = $i"
    j=$((j+1))
done
echo "\$# = " $#
echo "\$0 = " $0
echo "\$$ = " $$


$ export IFS="c"
[$ ./internalVar.sh par1 "par meter 2" par3
$? =  0
$@ =  par1 par meter 2 par3  == several parameters?
var 1 = par1
var 2 = par meter 2
var 3 = par3
$* =  par1 par meter 2 par3  == a single string
var 1 = par1
var 2 = par meter 2
var 3 = par3
$# =  3
$0 =  ./internalVar.sh
$$ =  4638

1 个答案:

答案 0 :(得分:3)

这个怎么样:

"$@"

循环扩展,在第一种情况下"$*"是每个位置参数的单独参数,在第二种情况下for (int i = 0; i < items.length; i++) { boolean added=false; for(Bin bin: list){ if(bin.addItem(items[i])){ added=true; break; } } if(!added){ Bin bin=new Bin(); bin.addItem(items[i]); list.add(bin); } } return list; 是一个字符串。

第三和第四种情况,即未引用的情况,执行分词并且彼此没有区别。

另请参阅the manual,“特殊参数”。