Ответ 1
Как @Cory правильно указали, не должно быть пробелов вокруг знака равенства, иначе bash будет путать COUNTER
для команды.
COUNTER=$(expr $COUNTER + 1)
выход из темы...
Тем не менее, вы можете избежать bash для подпроцесса, используя следующие альтернативы:
-
Используя bash встроенная команда 'let':
let COUNTER="COUNTER + 1"
-
или, используя выражение bash c-style:
(( COUNTER++ ))
Фактически, ваш цикл while может быть записан как:
for ((COUNTER=0; COUNTER <= 5 ; COUNTER++))
do
echo "i will add this line to file mycreation">>./myfile
done
Нарушение сообщения об ошибке
Когда вас встретила ошибка:
line 7: 0: command not found.
'-----' '--' '------------------'
| | |
location | Description of error.
culprit
Мое предположение - это то, что у вас на линии 7 было
$COUNTER = `expr $COUNTER + 1`
-------- --------------------
| |
Evaluated to 0 |
Evaluated to 1
То, что bash заканчивается, выглядит как 0 = 1
, и поскольку операторы bash обычно имеют форму command arg1 arg1 ...
, bash интерпретирует его как запускающую команду 0
с аргументами = 1
. Таким образом, сообщение об ошибке: 0: command not found
.
Когда вы удаляете пробелы вокруг знака равенства, то что bash заканчивается интерпретацией:
0=1
что означает выполнение команды 0=1
без аргументов, следовательно, ошибка 0=1: command not found
.
Переменные назначения должны быть в форме VAR_NAME=VALUE
(без $
), поэтому синтаксис, который вы должны использовать, это:
COUNTER=`expr $COUNTER + 1` # or any of the variants above
который bash оценивает и в конечном итоге интерпретирует как:
COUNTER=2