如果脚本有
if [ $1 == "-?" ]; then #line 4
echo "usage: ...."
fi
当脚本在没有任何参数的情况下运行时,它会抱怨
./script.sh: line 4: [: ==: unary operator expected
但是如果相反
if [ "$1" == "-?" ]; then #line 4
echo "usage: ...."
fi
然后一切都很好
为什么会这样?
感谢
答案 0 :(得分:5)
因为[
在执行之前替换了值。 [[
没有,因此会按预期工作。
答案 1 :(得分:5)
如果第一个参数缺失或为空,则第一个脚本的计算结果为:
if [ == "-?" ] ; then
...这是一个语法错误。正如您所注意到的,为了防止您需要使用""
,它会评估为:
if [ "" == "-?" ] ; then
AFAIK这是由于原始Bourne shell的工作方式。你应该养成在""
中包含变量的习惯,以便在包含空格的参数中正常工作。例如,如果你像这样调用你的脚本:
./myScript "first argument has spaces"
然后您的第一个脚本将评估为:
if [ first argument has spaces == "-?" ] ; then
这也是语法错误。如果您使用空格传递文件名,rm $1
之类的内容也无法执行您想要的操作。请改为rm "$1"
。