Bash 运算符与命令连接符

Bash 中的算术运算、条件判断和命令连接符属于不同语法,含义不能混用。

整数算术

(( ... )) 和算术展开 $(( ... )) 支持整数运算:

运算符作用
+-*/加、减、乘、除
%取余
**乘方
++--自增、自减
+=-=*=/=%=复合赋值
==!=<<=>>=数值比较
&&||!逻辑与、逻辑或、逻辑非
&|^~按位与、按位或、按位异或、按位取反
left=5
right=6
sum=$(( left + right ))
 
(( left += 2 ))
printf 'sum=%d, left=%d\n' "$sum" "$left"

Bash 算术默认使用整数,5 / 2 的结果是 2。除数为零会产生错误。

命令连接符

命令连接符根据命令的退出状态控制执行流程:

# 前一个命令成功才执行后一个
prepare && run_job
 
# 前一个命令失败才执行后一个
run_job || echo "执行失败" >&2
 
# 顺序执行,不关心前一个命令是否成功
first_command; second_command
 
# 反转命令的退出状态
if ! check_status; then
  echo "检查未通过" >&2
fi

管道与后台执行

在普通命令语法中,|& 不是逻辑运算符:

# 将前一个命令的标准输出连接到后一个命令
producer | consumer
 
# 在后台启动命令
long_running_command &

需要检测管道中上游命令的失败时,可以使用 set -o pipefail

参考资料