bash中“$ *”的一些用例是什么?

时间:2015-05-06 16:48:30

标签: bash parameters arguments command-line-arguments

来自bash手册页:

  

"$*"相当于"$1c$2c...",其中cIFS变量值的第一个字符。

     

"$@"相当于"$1" "$2" ...

"$@"无法取代"$*"的任何示例?

3 个答案:

答案 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