- 论坛徽章:
- 0
|
网上查到的有关$*和$@的说法:
$*:所有的位置参数,被作为一个单词.注意:"$*"必须被""引用.
$@:与$*同义,但是每个参数都是一个独立的""引用字串,这就意味着参数被完整地传递,并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的单词.注意:"$@"必须被引用.
以下是我写的一个测试代码:
#!/bin/bash
# 测试位置参数 $* 和 $@
if [ -z "$1" ]
then
echo "Usage : `basename $0` argument1 argument2 etc."
exit 1
fi
arg1=$*
arg2="$*"
arg3=$@
arg4="$@"
echo -e "$arg1\n$arg2"
echo -e "$arg3\n$arg4"
index=0
for arg in $*;
do
let "index+=1"
echo "#$index = $arg"
done
index=0
for arg in "$*";
do
let "index+=1"
echo "#$index = $arg"
done
index=0
for arg in $@
do
let "index+=1"
echo "#$index = $arg"
done
index=0
for arg in "$@"
do
let "index+=1"
echo "#$index = $arg"
done |
刚学SHELL编程,可能对上面两句话的理解不够,有以下疑问,大家看在小弟在深夜2点多还在学习的份上,给解惑下吧:
1. $* 和 $@ 不用 " 引用似乎也能正常使用,哪在什么情况下或是用什么样的参数调用此脚本时才会出错
2. 从上面的脚本运行结果可以看到 $* 在不加 " 时每个参数是独立分开的,而如果加 " 才是所有的整体,$@ 加不加 " 每个参数都是一个单独的单词 |
|