来自bash man页面:
"$*"
等于"$1c$2c..."
,其中c
是IFS
变量值的第一个字符。
"$@"
等于"$1" "$2"
...
"$@"
无法代替"$*"
的任何示例?
我最喜欢的用途是更换场分隔符。
$ set -- 'My word' but this is a bad 'example!'
$ IFS=,
$ echo "$*"
My word,but,this,is,a,bad,example!
还有其他替换定界符的方法,但是IFS和"$*"
通常是最简单的。
这些是完全不同的工具,应在完全不同的情况下使用。关于另一个代替另一个没有合理的问题,因为在任何给定的情况下,只有一个是正确的。
"$*"
尝试从参数列表中形成单个字符串参数时最适用 - 主要用于登录(但不是参数之间的划分很重要的情况;然后, "$@"
适用于诸如 print '%q '
之类的东西)。"$@"
在...嗯,任何其他情况下都有用。
示例:
die() {
local stat=$1; shift
log "ERROR: $*"
exit $stat
}
使用"$*"
格式化以将其传递给log
的字符串仅使用单个ARGV条目,从而允许将来将其他可选的位置参数添加到log
的使用中。
$*将所有参数扩展为一个单词,其中ifs在参数之间。
$@将所有参数作为列表展开。
尝试名为list.sh的文件中的下一个代码:
#!/bin/bash
echo "using '$*'"
for i in "$*"
do
echo $i
done
echo "using '$@'"
for i in "$@"
do
echo $i
done
使用它:
./list.sh apple pear kiwi