测试使用“$ f”但不能使用“$ @”

时间:2014-03-04 10:22:56

标签: command-line-arguments sh

我正在写一个小小的bash脚本并注意到一件奇怪的事情。基本上就是我执行这个时:

if [ "$@" = "spam with eggs" ]
then
    echo "yay"
else
    echo "nay"
fi

这会出现以下错误:

$ sh spam.sh spam with eggs
spam.sh: 3: [: =: unexpected operator
nay

但是,如果我将脚本更改为以下内容,则可以正常运行:

f="$@"
if [ "$f" = "spam with eggs" ]
then
    echo "yay"
else
    echo "nay"
fi

为什么它首先不能与"$@"一起使用?

1 个答案:

答案 0 :(得分:3)

因为"$@"非常专门用来保存空白。在您的示例中,它返回三个字符串,而不是一个。你想在这里"$*"。 (这是不寻常的;大多数人都有相反的问题。)