我正在写一个小小的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
为什么它首先不能与"$@"
一起使用?
答案 0 :(得分:3)
因为"$@"
非常专门用来保存空白。在您的示例中,它返回三个字符串,而不是一个。你想在这里"$*"
。 (这是不寻常的;大多数人都有相反的问题。)