#shell
Вопрос:
Я пытаюсь увеличивать и уменьшать значения переменных в цикле while на каждой итерации.
Я указал ошибку, ниже которой я получаю.
******0 ./test1.sh: line 8: [: expr $b - 1: integer expression expected
./test1.sh: line 4: [: expr $a 1: integer expression expected******
while [ "$a" -le 10 ]
do
b="$a"
while [ "$b" -ge 0 ]
do
echo -n "$b "
b='expr $b - 1'
done
a='expr $a 1'
done
Комментарии:
1.
b='expr $b - 1'
задаетb
литеральную строкуexpr $b - 1
, которая не является целым числом. Вы, вероятно, хотели написатьb=$(expr $b - 1)
, иb=$(expr $b 1)
, но есть лучшие способы написать это.
Ответ №1:
Вы ошибочно используете одинарные кавычки для переноса expr $a 1
. Делая это, $a
вы не будете расширяться до значения a
. Вместо этого двойные кавычки позволят $a
расшириться.
Простая демонстрация проблемы: на терминале введите a=1
и нажмитеEnter, затем введите echo 'a is $a'
и нажмите Enterеще раз , чтобы увидеть, что терминал печатает буквально a is $a
. Затем сделайте это снова, но на этот раз команда есть echo "a is $a"
, и вы увидите отпечатки терминала a is 1
.