fish shell中&&与and运算符是否完全等价?
fish shell 中
&& 与 and 的差异说明 二者并不完全相同,仅在最简单的「前一条命令成功则执行后一条命令」的串行调用场景下表现一致,在多个边界场景下会有明显差异:
- 语法规则限制不同
and支持作为新行的开头使用,承接上一条命令的退出状态,&&不支持行首写法,会直接触发语法错误。
合法的and写法:
echo "第一步执行成功" and echo "第二步执行"
非法的 && 写法:
echo "第一步执行成功" && echo "第二步执行" # 执行报错:fish: Unexpected '&&' at beginning of line
- 运算符优先级不同
&&的优先级远高于and,混合其他逻辑运算符时二者的运算顺序完全不同,最终执行结果会有明显差异:
# && 优先级高于 ||,优先计算后半段的 && 逻辑 true || false && echo "&& 测试输出" # 运算逻辑:true || (false && echo "..."),前半段已满足或逻辑,后半段不执行,无输出
# and 优先级低于 ||,优先计算前半段的 || 逻辑 true || false and echo "and 测试输出" # 运算逻辑:(true || false) and echo "...",或逻辑整体为真,后续语句执行,有输出
- 语法兼容性不同
&&是POSIX标准定义的通用逻辑运算符,在绝大多数shell中都可以通用;and是fish独有的语法糖,仅能在fish环境中使用,无法移植到bash、zsh等其他shell。
内容的提问来源于stack exchange,提问作者H.B.
相关产品推荐
相关产品推荐

