本博客已遷往http://coredumper.cn
$@和$*都代表所有命令行參數,但是二者是有區別的。
$*將命令行上提供的所有參數當作一個參數來保存,$@將命令行上提供的所有參數當作一個字符串中的多個獨立的參數來保存。
通常都是在程序中使用$@,並且用雙引號引起來。下面舉例說明:
以下5個程序的程序名都是test.sh,均執行如下命令:
sh test.sh a b "c d"
希望得到的輸出是:
a
b
c d
程序1
for var in $*
do
echo $var
done
輸出:
a
b
c
d
程序2
for var in $@
do
echo $var
done
輸出:a
b
c
d
程序3
for var in "$*"
do
echo $var
done
輸出:
a b c d
程序4
for var in "$@"
do
echo $var
done
輸出:
a
b
c d
程序5
while [ -n "$1" ]
do
echo $1
shift
done
輸出:
a
b
c d
只有最後兩個程序得到了期望的結果,可以看出雙引號的作用是很重要的。