Если вы не объявляете переменную и не присваиваете ей напрямую, то это либо строка (var=stuff
), либо массив (var=(element0 element1 element2)
). Поскольку y
является строкой, y+=2000
добавляет строку 2000
к значению.
Вы можете объявить y
как целочисленную переменную, тогда оператор +=
выполнит сложение.
declare -i y=$2
if ((y >= 0 && y <= 50)); then
y+=2000
elif ((y >= 51 && y <= 99)); then
y+=1900
fi
Другой способ - использовать оператор +=
внутри арифметического выражения:
y=$2
if ((y >= 0 && y <= 50)); then
((y+=2000))
elif ((y >= 51 && y <= 99)); then
((y+=1900))
fi
Или вы можете выполнить арифметическую операцию и присвоить результат:
y=$2
if ((y >= 0 && y <= 50)); then
y=$((y+2000))
elif ((y >= 51 && y <= 99)); then
y=$((y+1900))
fi
Вы можете написать все это в одном арифметическом выражении, используя условный оператор ? … :
:
y=$2
if ((y >= 0)); then ((y <= 50 ? y += 2000 : y <= 99 ? y+=1900 : 0)); fi