bash пока л oop не сотрудничает? - PullRequest
0 голосов
/ 04 мая 2020

Я учусь писать сценарии и создаю правку. sh Чтобы сделать простое, пока l oop, это выглядит следующим образом

#!/bin/sh

a=0 

while [ $a -lt 10 ] 
do
echo $a
a='expr $a + 1'
done

Я гуглил эту проблему и большую часть времени ее проблема с пробелами .... но я проверил и переписал код примерно 10 раз, и я всегда получаю

. / edit. sh: строка 5: [: слишком много аргументов.

Я не могу себе представить, что я делаю неправильно, это, наверное, действительно глупо, я просто не могу это увидеть, любая помощь прижилась. спасибо!

1 Ответ

3 голосов
/ 04 мая 2020

С вашим кодом, как он написан, вы присваиваете буквальную строку expr $a + 1 имени a на первой итерации, а не результат команды expr 0 + 1. Если $a не заключено в кавычки, вы затем попытаетесь выполнить команду [ expr $a + 1 -lt 10 ], которая действительно имеет слишком много аргументов.

Непосредственная проблема заключается в том, что вы приняли ошибочные кавычки за одинарные кавычки; Вы намеревались написать

a=`expr $a + 1`

Однако, обратные кавычки почти никогда не должны использоваться, вместо этого используется конструкция $(...) для подстановки команд.

a=$(expr $a + 1)

Однако , нет необходимости использовать команду expr для арифметики c в POSIX-совместимых оболочках. Вместо этого используйте $((...)).

a=$((a + 1))
...