Shell $*和$@的区别

$* 和 $@ 都表示传递给函数或脚本的全部参数,咱们已在《Shell特殊变量》一节中进行了演示,本节重点说一下它们之间的区别。bash

当 $* 和 $@ 不被双引号" "包围时,它们之间没有任何区别,都是将接收到的每一个参数看作一份数据,彼此之间以空格来分隔。ide

可是当它们被双引号" "包含时,就会有区别了:
"$*"会将全部的参数从总体上看作一份数据,而不是把每一个参数都看作一份数据。
"$@"仍然将每一个参数都看做一份数据,彼此之间是独立的。函数

好比传递了 5 个参数,那么对于"$*"来讲,这 5 个参数会合并到一块儿造成一份数据,它们之间是没法分割的;而对于"$@"来讲,这 5 个参数是相互独立的,它们是 5 份数据。it

若是使用 echo 直接输出"$"和"$@"作对比,是看不出区别的;但若是使用 for 循环来逐个输出数据,当即就能看出区别来。
关于 for 循环的用法请猛击:Shell for循环和for int循环详解
编写下面的代码,并保存为 test.sh:
#!/bin/bash
echo "print each param from \"\$
\""
for var in "$"
do
echo "$var"
done
echo "print each param from \"\$@\""
for var in "$@"
do
echo "$var"
done
运行 test.sh,并附带参数:
[mozhiyan@localhost demo]$ . ./test.sh a b c d
print each param from "$
"
a b c d
print each param from "$@"
a
b
c
dfor循环

从运行结果能够发现,对于"$*",只循环了 1 次,由于它只有 1 分数据;对于"$@",循环了 5 次,由于它有 5 份数据。class

相关文章
相关标签/搜索