如果仅使用IF条件,我可以在命令提示符下得到答案。 但是如果添加elif,命令提示符仍然是打开的&没有结束......
我用的代码......
-bash-3.00$ if [ "1" == "1" && "$cont" == "1" ]; then
> echo "I am if"
> elif [ "$cont" == "1"" ]; then
> echo "I am else"
> fi
>
>
预期输出它应该结束&返回回声;
答案 0 :(得分:3)
您可以将&&
更改为-a
:
$ cont=1
$ if [ "1" = "1" -a "$cont" = "1" ]; then echo "ha"; fi
ha
或者使用两个单独的[
命令:
$ if [ "1" = "1" ] && [ "$cont" = "1" ]; then echo "ha"; fi
或使用双括号:
$ if [[ "1" == "1" && "$cont" == "1" ]]; then echo "ha"; fi
ha
另请注意,"
你的elif中有{{1}}太多,RedX comments。
答案 1 :(得分:2)
elif [ "$cont" == "1"" ]; then
无效;报价必须成对出现:
elif [ "$cont" == "1" ]; then
给你:
if [ "1" == "1" && "$cont" == "1" ]; then
echo "I am if"
elif [ "$cont" == "1" ]; then
echo "I am else"
fi
以bash: [: missing ']'
原因是第一行。您正在使用单[
,这意味着BASH会看到:
if [ "1" == "1"
pipe (&&)
"$cont" == "1" ]; then
尝试
if [[ "1" == "1" && "$cont" == "1" ]]; then
echo "I am if"
elif [[ "$cont" == "1" ]]; then
echo "I am else"
fi
单个[
是Bourne shell时间的旧 bug 功能。它们产生了各种问题,这些问题都是用[[...]]
语法解决的。
除非您知道自己在做什么,否则请避免使用单[
和反引号语法(而是使用$(cmd...)
)。
提示:要调试这样的事情,请使用set -x
让shell打印每个命令。