if-statement - 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
任何想法缺少什么?
非常感谢。山姆
解决方案
你可以这样说:
[[ 1 -eq 1 ]] && { [[ 2 -eq 1 ]] ; true ; } || echo hi
如果第一个测试通过,你进入{...}
块,一旦你运行,你想在那里运行什么,以true
你结束,不要继续过去||
,代表你的else
条款。
问题是。[[ 2 -eq 1 ]]
返回 false ,因此你得到你的echo hi
Beyond ||
。
综上所述,您可能会看到它看起来有点难看,在这种情况下(尤其是涉及多个条件,这可能会影响您的管道的评估方式)。好吧,我建议不要节省很少的换行符,并且为了明显和可读的代码使用更长的形式。
推荐阅读
- python-3.x - 我已经从模型中删除了一个表,但 django 仍在寻找它
- python - PostgreSQL - 小数点后 2 位?
- matplotlib - 基于 matplotlib 中相同值的连接点
- entity-framework - 实体框架核心包含警告
- sdk - WebSDK v9.3.1 SmartCapture 错误(内部部署)
- apache-nifi - QueryRecord 无法写入属性
- python - 从类运行时出现python nats连接错误
- npm - 我怎样才能解决'gyp ERR!堆栈错误:未找到:CI 服务器上的 make'
- c++ - strtol 指向原始字符串
- visual-studio-code - VS Code如何打开一个不安装任何扩展的窗口?