я написал один простой сценарий оболочки, используя вложенный цикл while, но я получил ошибку, в которой я пытаюсь уменьшить значения «b» и увеличить значения «a»

#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 .