我正在尝试使用bash / sh删除基于用户输入的内容,这是我的代码:
echo "remove ? [Y/n]"
read REMOVE
if [ $REMOVE != "n" ] || [ $REMOVE !="N" ];then
# ... do something ...
echo "done"
fi
我得到的错误是:
./ run.sh:line 8:意外符号«then»附近的语法错误
./ run.sh:8行:`if [$ REMOVE!=“n”] || [$ REMOVE!=“N”];然后'
我尝试多次添加/删除空格,但我仍然不明白会发生什么。我也不太了解[[ statement ]]
[statement]
或((statement))
之间的所有差异。
如果有人可以提供帮助......
答案 0 :(得分:2)
在您的原始问题中,您需要一个空格
$REMOVE != "N"
在您对shruti1810的评论回复中,您的$REMOVE
变量听起来并不包含您认为包含的内容。
尝试添加
echo $REMOVE
到你的剧本。
我通常使用这个构造
if [ "x$REMOVE" != "xn" ] || [ "x$REMOVE" != "xN" ]
then
# ... do something ...
echo "done"
fi
确保我的论证都有效。
答案 1 :(得分:1)
请试试这个:
echo "remove ? [Y/n]"
read REMOVE
if [ $REMOVE != "n" ] && [ $REMOVE != "N" ]
then
# ... do something ...
echo "done"
fi
答案 2 :(得分:1)
引用" $ REMOVE"并在"!="周围插入空格; - 像这样;
if [ "$REMOVE" != "n" ] || [ "$REMOVE" != "N" ];then
# ... do something ...
echo "done"
fi
问题是没有设置REMOVE或者如果它被设置为空字符串(就像你只是按下'阅读')你会得到$ REMOVE替换为空和你的表达看起来像[ != "N" ]
会产生unary operator expected
错误。