Почему команда a -=2 не работает?

Вы также можете использовать функцию для yumy:

#!/bin/bash
yumy() {
    yum install -y "$@"
}
yumprovision() {
    yumy
}

"$@"расширяется до аргументов этой функции, поэтому yumy foo barработает так же, как yum install -y foo bar.

Bash по умолчанию не расширяет псевдонимы в неинтерактивных оболочках, но вы можете изменить это с помощью shopt expand_aliases, если вы действительно хотите, см. The Shopt Builtin в руководстве . Но причин для этого мало, функции во многих отношениях лучше.

6
17.07.2020, 13:04
2 ответа

Bash не имеет -=оператора присваивания в синтаксисе основной оболочки (арифметический контекст отличается, см. ниже ). То есть, хотя вы можете использовать =для присваивания переменных и +=для добавления к не -целочисленным переменным или добавления к целочисленным переменным, нет -=, *=и т. д. с ними. Такая же ситуация и в Ksh, где синтаксис Баша заимствован из (в этом случае, как и во многих других ); и в Zsh, у которого тоже есть подобные особенности.

Другие комбинированные операторы присваивания, кроме +=, в любом случае, вероятно, не имели бы особого смысла для целых чисел, отличных от -, и, поскольку обычные «строковые» переменные являются наиболее распространенными, вероятно, не стоит иметь эти операторы в основной синтаксис. Тем более, что var*=123тоже является шаром, а var/=123выглядит как путь. Но, как было сказано, +=работает для целых чисел, отличных от -, хотя:

$ foo=123; foo+=456; echo $foo
123456

Руководство, как обычно, несколько кратко об этом, документируя отсутствие -=только путем упущения. Раздел 3.4 Параметры оболочки описывает назначение переменных и упоминает +=, но ничего больше.

Конечно, в арифметическом контексте ($((.. )), ((.. ))и т. д. ), доступны все +=, -=, *=и т. д.:

$ foo=456; (( foo -= 123 )); echo $foo
333
22
18.03.2021, 23:19

Другие ответы отмечают , почемуa-=2не работает (и что((a-=2))будет работать ). Я подумал, что стоит записать, что a+=-2также будет работать:

$ declare -i a=5
$ echo $a
5
$ a+=2
$ echo $a
7
$ a+=-2
$ echo $a
5
0
18.03.2021, 23:19

Теги

Похожие вопросы