首页 > 解决方案 > ksh if 循环 vs [[ ]] && { cmd1 ; } || { cmd2 ; }

问题描述

我正在编写一个 shell 脚本,下面的语法可以正常工作:

if [[ 1 -eq 1 ]] ; then
   [[ 2 -eq 1 ]]
else
   echo hi
fi

调试运行:

+ [[ 1 -eq 1 ]]
+ [[ 2 -eq 1 ]]

如果我缩小语句,它会跳转到 else 条件:

**[[ 1 -eq 1 ]] && { [[ 2 -eq 1 ]] ; } || echo hi**

调试运行:

+ [[ 1 -eq 1 ]]
+ [[ 2 -eq 1 ]]
+ echo hi
hi

任何想法缺少什么?

非常感谢。山姆

标签: if-statementksh

解决方案


你可以这样说:

[[ 1 -eq 1 ]] && { [[ 2 -eq 1 ]] ; true ; } || echo hi

如果第一个测试通过,你进入{...}块,一旦你运行,你想在那里运行什么,以true你结束,不要继续过去||,代表你的else条款。

问题是。[[ 2 -eq 1 ]]返回 false ,因此你得到你的echo hiBeyond ||

综上所述,您可能会看到它看起来有点难看,在这种情况下(尤其是涉及多个条件,这可能会影响您的管道的评估方式)。好吧,我建议不要节省很少的换行符,并且为了明显和可读的代码使用更长的形式。


推荐阅读