例子:在算術表達式中,爲什麼遞增變量會修改其他操作沒有的原始值?
$ number=1
$ ((number++))
$ echo $number
2
$ ((number * 10))
$ echo $number
2
修復的方法是簡單的:number=$((number * 10))
,我只是不明白這兩個操作的行爲有什麼可能的原因是不同的。
例子:在算術表達式中,爲什麼遞增變量會修改其他操作沒有的原始值?
$ number=1
$ ((number++))
$ echo $number
2
$ ((number * 10))
$ echo $number
2
修復的方法是簡單的:number=$((number * 10))
,我只是不明白這兩個操作的行爲有什麼可能的原因是不同的。
修復的方法是簡單的:
number=$((number * 10))
,[…]
的符號你正在尋找的是
((number *= 10))
這是一個速記對於
((number = number * 10))
我想你會同意,如果像echo $((3 * a + 12 * b))
突然改變的a
或b
價值將是驚人的。因此對變量的更改始終爲顯式:它們使用專門設計用於分配的運算符之一,如=
和+=
。如您所見,增量運算符++
就是其中之一(與遞減運算符--
一樣)。
維基百科具有在「算術操作符」下列出的增量運算符(foo ++),但是有一個「化合物賦值運算符」的整個表,我大多不知道(bar'+ =')。 '* ='毫不意外地被稱爲「Multiplication assignment」運算符。 有趣!謝謝ruakh。 – ElectricWarr
因爲這就是他們設計的目的。
如果您希望number+1
的值不改變number
,您可以使用(不出意外)number+1
。
請不要對新程序員這麼粗魯。 – Cybersupernova
@Cybersupernova不要把粗魯弄糊塗。 – chepner
其全部關於value
和reference
。
的++
操作者增加存儲單元的由$number
引用,而所有其它(留下極少更像--
)運營商處理的$number
僅值的值。
因此++
增加$number
值而另一些(你的情況$number
)返回計算值用於任何可變
'++'操作符的行爲是特例。它反映了C中同一個操作符的行爲。在Bash中,很少操作直接修改它們的操作數;大多數只計算一個值。這樣的操作通常更便於構建,但''++'操作符的行爲經常需要足夠的保證,以及普通的'+'操作符。 –
只需嘗試'((number * = 10))'看看。運營商模擬他們的C對手,所以你需要一些C背景來了解這些。 –
感謝@JohnBollinger - 如果您的評論是答案,我會接受它。 – ElectricWarr