1

说我有一个功能

print_args () {
    for i in $@; do
        echo "$i"
    done
}

当我做

foo='\*'
print_args $foo

我明白了

\*

(带有反斜杠)作为输出。

如果我改为更改 to 的定义foofoo='*'我会在运行时获取当前目录中的所有文件print_args $foo

所以我要么得到反斜杠,要么得到*解释,但我不知道如何得到*字面意思。

无论我是否包含双引号,输出都是相同的$foo

4

1 回答 1

1

一般规则是引用所有变量。它可以防止外壳扩展和空间分裂。所以你的函数应该是这样的(引用$@,以及${array[@]}按参数拆分):

print_args () {
    for i in "$@"; do
        echo "$i"
    done
}

并这样称呼它:

print_args "$foo"
于 2015-07-22T08:03:51.293 回答