If statement ksh中频环路vs[[]]和&;{cmd1;}|{cmd2;}

If statement ksh中频环路vs[[]]和&;{cmd1;}|{cmd2;},if-statement,ksh,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

我正在编写一个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
你知道缺少什么吗

多谢。
Sam

你可以说:

[[ 1 -eq 1 ]] && { [[ 2 -eq 1 ]] ; true ; } || echo hi
如果第一个测试通过,您进入
{…}
块,一旦运行,您想要在其中运行的内容,以
true
结束,您就不会继续通过
|
这里的
else
子句

问题是<代码>[[2-eq 1]]返回false,因此您可以在
|
之外找到您的
echo hi


综上所述,您可能会看到它看起来有点难看,在这种情况下(特别是当涉及多个条件时,可能会影响管道的评估方式)。好吧,我建议不要在几行换行上省钱,并且为了代码清晰易读,请使用较长的格式。

谢谢。我想我没有得到[[2-等式1]]部分的回应。这很有帮助。是的,
{…}
块的最后一个返回值(在本例中是内部测试的结果)向外传播,其余的我想是显而易见的。
1-eq 1
2-eq 1
怎么可能都是真的?当您将它们链接在一起时,您会得到一个错误的语句,因为
2-NE 1
,所以您会得到else路径。祝你好运