脚本
通过命令行传参时,$@
和$*
都可以接收多个参数,是否有区别呢?
#!/bin/bash
function test_args() {
echo "不加双引号的时候\$*和\$@输出对比"
echo "------------\$*输出------------"
echo $*
echo "------------\$@输出-----------"
echo $@
echo
echo
echo "使用双引号的时候\$*和\$@输出对比"
echo "------------\$*输出------------"
for i in "$*"
do
echo $i
done
echo "------------\$@输出------------"
for j in "$@"
do
echo $j
done
}
function main() {
if [[ $# -le 1 ]];then
echo "$0 调用时候参数太少,至少需要有2个参数,否则看不出效果哦!"
exit
else
test_args $@
fi
}
main $@
测试
# sh 1.sh
1.sh 调用时候参数太少,至少需要有2个参数,否则看不出效果哦!
# sh 1.sh 1
1.sh 调用时候参数太少,至少需要有2个参数,否则看不出效果哦!
不加双引号的时候, ∗ 和 *和 ∗和@输出对比
# sh 1.sh 1 2
------------$*输出------------
1 2
------------$@输出-----------
1 2
使用双引号的时候," ∗ " 和 " *"和" ∗"和"@"输出对比
------------"$*"输出------------
1 2
------------"$@"输出------------
1
2
结论
- 当不用双引号的时候, @ 和 @和 @和*效果是一样的
- 当使用双引号的时候,
$@
将传的每一个参数单独当成一个字符串,而$*
将所有传入的参数当成一个字符串