If statement ksh中频环路vs[[]]和&;{cmd1;}|{cmd2;}
我正在编写一个shell脚本,下面的语法很好: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
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路径。祝你好运