我正在处理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
有什么想法遗漏了什么?
非常感谢。 山姆
答案 0 :(得分:1)
您可以说以下话:
[[ 1 -eq 1 ]] && { [[ 2 -eq 1 ]] ; true ; } || echo hi
如果第一个测试通过,则进入{...}
块,然后运行要在其中运行的内容,以true
结尾,就不会继续经过||
在这里代表您的else
子句。
问题是。 [[ 2 -eq 1 ]]
返回false,因此您进入echo hi
之后的||
。
所有这些,您可能会发现它看起来有些丑陋,在这种情况下(尤其是涉及多个条件,可能会影响您的管道评估方式)。好吧,我建议不要保存一些换行符,并且为了使代码清晰易读,请使用更长的格式。