$ 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))
, [& hellip;]
обозначение вы ищете
((number *= 10))
который является сокращением для
((number = number * 10))
Я думаю, вы согласитесь, что было бы удивительно, если бы что-то вроде echo $((3 * a + 12 * b))
внезапно изменили значение a
или b
. Поэтому переменные в переменных всегда явно: они используют один из операторов, специально предназначенных для назначения, таких как =
и +=
. Как вы заметили, оператор инкремента ++
является одним из них (как и оператор декремента, --
).
В Википедии есть оператор инкремента (foo ++), указанный в разделе «Арифметические операторы», но есть целая таблица «Операторы вспомогательного присваивания», о которых я в основном не знал (bar '+ ='). '* =' неудивительно называют оператором «Умножение умножения». Интересно! Спасибо, ruakh. – ElectricWarr
Потому что это то, что они предназначены для работы.
Если вы хотите, чтобы значение number+1
без изменения number
, вы используете (неудивительно) number+1
.
Пожалуйста, не будьте так грубы к новым программистам. – Cybersupernova
@Cybersupernova Не ошибитесь в грубости за грубость. – chepner
Его все о value
и reference
.
++
оператор увеличивает значение ячейки памяти, на который ссылается $number
в то время как все другие (оставив несколько подобных --
) операторов процесса только значение $number
.
Следовательно ++
увеличивает значение $number
в то время как другие возвращают вычисленное значение любого переменный ($number
в вашем случае)
Поведение оператора '++' является особым случаем. Он отражает поведение одного и того же оператора в C. В Bash очень немногие операции непосредственно изменяют их операнды; большинство из них вычисляет значение. Такие операции, как правило, более удобны в использовании, но поведение оператора '++' требуется достаточно часто, чтобы гарантировать его включение, наряду с обычным оператором '+'. –
просто попробуйте '((число * = 10))' и посмотрим. Операторы подражают своим C-образным аналогам, поэтому вам нужно знать C о них. –
Спасибо @JohnBollinger - если бы ваш комментарий был ответом, я бы принял его. – ElectricWarr