unix bash如果其他声明不起作用



如果仅使用条件,我就可以在命令提示中获得答案。但是,如果添加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在看到的每个命令中打印每个命令。

相关内容

  • 没有找到相关文章

最新更新