如果仅使用条件,我就可以在命令提示中获得答案。但是,如果添加elif,则命令提示符仍然打开&没有结束...
我使用的代码...
-bash-3.00$ if [ "1" == "1" && "$cont" == "1" ]; then
> echo "I am if"
> elif [ "$cont" == "1"" ]; then
> echo "I am else"
> fi
>
>
预期输出:它应该结束&返回echo;
您可以将&&
更改为 -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中有太多,如redx评论。
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 Times的旧 bug 。它们产生了用[[...]]
语法解决的各种问题。
除非您知道自己在做什么,否则请避免使用单个[
和Backtick语法(改用$(cmd...)
)。
提示:要调试类似的内容,请使用set -x
在看到的每个命令中打印每个命令。