Bash 的条件运算符和赋值

MS.*_*Kim 7 shell bash shell-script arithmetic

我们可以在冒号后使用 bash 的条件运算符和赋值运算符吗?

Bash 参考手册解释了算术运算符如下。

  • 条件运算符 expr ? expr : expr
  • 任务 = *= /= %= += -= <<= >>= &= ^= |=

首先,这段代码似乎运行良好:

a=1; ((a? b=1 : 2 )) #seems to work
Run Code Online (Sandbox Code Playgroud)

但是当我在 之后使用赋值运算符时:,我得到了“尝试赋值给非变量”错误:

a=1; ((a? b=1 : c=1)) #attempted assignment to non-variable error
Run Code Online (Sandbox Code Playgroud)

为什么我们只能在冒号前使用赋值运算符?

cel*_*chk 5

Bash 将你的最后一个命令解析为

a=1; (( (a? b=1 : c)=1 ))
Run Code Online (Sandbox Code Playgroud)

这应该清楚为什么它不起作用。相反,你必须使用

a=1; (( a? b=1 : (c=1) ))
Run Code Online (Sandbox Code Playgroud)