数学上下文中的bash操作顺序:分配了错误的值

时间:2015-08-24 11:41:39

标签: linux shell

鉴于linux shell代码,

~$ (( b = a, (a += 3) + $((a = 1)), b++ ))
~$ echo $b
2

为什么$b等于2?我将代码分为三个步骤:

~$ ((b = a))
~$ (((a += 3) + $((a = 1))))
~$ ((b++))
~$ echo $b
1
这次

$b等于1,为什么?

P.S。 a和b都没有被初始化。

1 个答案:

答案 0 :(得分:0)

因为您设置了b = a,然后bash等待最后分配a。在b中,系统会为分配给a的值分配相同的值。

~$ (( b = a, (a += 3) + $((a = 5)), b++ ))
~$ echo $b
6
~$ echo $a
8

修改

1)按列处理列分隔的表达式

~$ echo $((1+1, 2+2, 3+3))
6

2)首先处理$((...))个表达式

给出结果:

(( b = a, (a += 3) + $((a = 1)), b++ ))
  1. $((a = 1)) #a=1
  2. b = a #a=b=1
  3. a += 3 #a=4, b=1
  4. b++ #a=4, b=2