2017-01-10 49 views
0

例子:在算術表達式中,爲什麼遞增變量會修改其他操作沒有的原始值?

$ number=1 
$ ((number++)) 
$ echo $number 
2 
$ ((number * 10)) 
$ echo $number 
2 

修復的方法是簡單的:number=$((number * 10)),我只是不明白這兩個操作的行爲有什麼可能的原因是不同的。

+0

'++'操作符的行爲是特例。它反映了C中同一個操作符的行爲。在Bash中,很少操作直接修改它們的操作數;大多數只計算一個值。這樣的操作通常更便於構建,但''++'操作符的行爲經常需要足夠的保證,以及普通的'+'操作符。 –

+0

只需嘗試'((number * = 10))'看看。運營商模擬他們的C對手,所以你需要一些C背景來了解這些。 –

+0

感謝@JohnBollinger - 如果您的評論是答案,我會接受它。 – ElectricWarr

回答

2

修復的方法是簡單的:number=$((number * 10)),[…]

的符號你正在尋找的是

((number *= 10)) 

這是一個速記對於

((number = number * 10)) 

我想你會同意,如果像echo $((3 * a + 12 * b))突然改變的ab價值將是驚人的。因此對變量的更改始終爲顯式:它們使用專門設計用於分配的運算符之一,如=+=。如您所見,增量運算符++就是其中之一(與遞減運算符--一樣)。

+0

維基百科具有在「算術操作符」下列出的增量運算符(foo ++),但是有一個「化合物賦值運算符」的整個表,我大多不知道(bar'+ =')。 '* ='毫不意外地被稱爲「Multiplication assignment」運算符。 有趣!謝謝ruakh。 – ElectricWarr

3

因爲這就是他們設計的目的。

如果您希望number+1的值不改變number,您可以使用(不出意外)number+1

+0

請不要對新程序員這麼粗魯。 – Cybersupernova

+4

@Cyber​​supernova不要把粗魯弄糊塗。 – chepner

1

其全部關於valuereference

++操作者增加存儲單元的由$number引用,而所有其它(留下極少更像--)運營商處理的$number僅值的值。

因此++增加$number值而另一些(你的情況$number)返回計算值用於任何可變

相關問題