在 Bash 手册中,第 6.5 节 Shell 算术
expr1 , expr2
comma
逗号运算符有什么作用?
expr1
和 是expr2
算术表达式吗?
答案1
,
是一个列表运算符。
算术表达式列表将从左到右计算,最后一个表达式结果是返回值:
$ echo "$(( a=1, ++a, ++a ))"
3
列表,
运算符已添加到 bash-2.04-devel 中(以及前/后递增/递减运算符)。
您可能想阅读expr.c
看看其他操作符是如何实现的,以及功能expcomma()
对于,
操作员来说。
答案2
重击
逗号运算符在 bash ( LESS=+/'expr1 , expr2' man bash
) 中有效:
expr1 , expr2
逗号
并且没有其他解释其用途。
为此我们必须阅读“C 语言”描述(所有算术运算符的诞生地)。
示例(如上面的链接所示)(其中第二个的值为 5):
$ echo "$(( (t=3, t+2) )) $t"
5 3
或者,更简单:
$ echo "$(( t=3, t+2 )) $t"
5 3
是的,每个元素用逗号分隔可能是一个表达式:
1313 expression:
assignment-expression
expression , assignment-expression
POSIX
POSIX 确实不是包括一个逗号运算符:
表:选定的 ISO C 标准运算符和控制流关键字
或者尝试一下:
$ dash -c 'echo $(( t=3,t+2 ))'
dash: 1: arithmetic expression: expecting EOF: " t=3,t+2 "
$ bash -c 'echo $(( t=3,t+2 ))'
5
正如 IBM 在其报告中所证实的那样AIX 和 POSIX shell 页面(强调我的):
所有积分运算符,以外..., 和逗号 (,), 支持。
但是,同样在 AIX 中,IBM 声称支持逗号运算符来自 ksh93 shell/usr/bin/ksh93
可以使用更多算术运算符,包括一元 +、++、-- 和 ?: 构造(例如,“x ? y : z”)以及 ,(逗号)运算符。
结论:
dash, ksh do not have a comma operator.
ksh93 may have a comma operator.
bash, zsh do have a comma operator.