Tim*_*Tim 4 shell bash arithmetic
在 Bash Manual, sec 6.5 Shell Arithmetic
expr1 , expr2
comma
Run Code Online (Sandbox Code Playgroud)
逗号运算符有什么作用?
是expr1和expr2算术表达式吗?
, 是一个列表运算符。
算术表达式列表将从左到右计算,最后一个表达式结果是返回值:
$ echo "$(( a=1, ++a, ++a ))"
3
Run Code Online (Sandbox Code Playgroud)
该,列表操作符是在bash-2.04-devel的增加(与前/后递增/递减运算)。
您可能需要阅读expr.c,看看其他经营者实施,功能expcomma()的,操作。
小智 7
逗号运算符在 bash ( LESS=+/'expr1 , expr2' man bash) 中有效:
expr1 , expr2
逗号
并且没有对其用途的其他解释。
为此,我们必须阅读“C 语言”描述(所有这些算术运算符的诞生地)。
示例(如上面的链接所示)(其中第二个的值为 5):
$ echo "$(( (t=3, t+2) )) $t"
5 3
Run Code Online (Sandbox Code Playgroud)
或者,更简单:
$ echo "$(( t=3, t+2 )) $t"
5 3
Run Code Online (Sandbox Code Playgroud)
是的,用逗号分隔的每个元素都可以是一个表达式:
1313 expression:
assignment-expression
expression , assignment-expression
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
正如 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.
Run Code Online (Sandbox Code Playgroud)