ksh if循环vs [[]] && {cmd1; } || {cmd2; }

时间:2018-06-26 13:15:02

标签: if-statement ksh

我正在处理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

有什么想法遗漏了什么?

非常感谢。 山姆

1 个答案:

答案 0 :(得分:1)

您可以说以下话:

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

如果第一个测试通过,则进入{...}块,然后运行要在其中运行的内容,以true结尾,就不会继续经过||在这里代表您的else子句。

问题是。 [[ 2 -eq 1 ]]返回false,因此您进入echo hi之后的||

所有这些,您可能会发现它看起来有些丑陋,在这种情况下(尤其是涉及多个条件,可能会影响您的管道评估方式)。好吧,我建议不要保存一些换行符,并且为了使代码清晰易读,请使用更长的格式。