来自bash手册页:
"$*"
相当于"$1c$2c..."
,其中c
是IFS
变量值的第一个字符。
"$@"
相当于"$1" "$2"
...
"$@"
无法取代"$*"
的任何示例?
答案 0 :(得分:5)
我最喜欢的用途是替换字段分隔符。
$ set -- 'My word' but this is a bad 'example!'
$ IFS=,
$ echo "$*"
My word,but,this,is,a,bad,example!
还有其他方法可以替换分隔符,但IFS和"$*"
通常是最简单的方法之一。
答案 1 :(得分:4)
这些是完全不同的工具,应该在完全不同的情况下使用。对于一个替代另一个人,没有合理的问题,因为在任何给定的情况下,只有一个或另一个是正确的。
当您尝试从参数列表中形成单个字符串参数时, "$*"
最适用 - 主要用于记录(但不是参数之间划分很重要的情况;然后,{{1}适用于"$@"
)之类的东西。 print '%q '
在......以及任何其他情况下都很有用。
示例:
"$@"
格式化要传递给die() {
local stat=$1; shift
log "ERROR: $*"
exit $stat
}
的字符串时使用"$*"
只使用一个argv条目,允许将其他可选位置参数添加到log
的用法中未来。
答案 2 :(得分:1)
$ *扩展为所有参数,只有一个单词,参数之间有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