Ответ 1
Удалите точку с запятой.
for i in `seq 2`; do echo "$i"; done > out.dat
SUGGESTIONS
Также, как предложил Фредрик Пихл, старайтесь не использовать внешние двоичные файлы, когда они не нужны, или, по крайней мере, когда практически нет:
for i in {1..2}; do echo "$i"; done > out.dat
for ((i = 1; i <= 2; ++i )); do echo "$i"; done > out.dat
for i in 1 2; do echo "$i"; done > out.dat
Кроме того, будьте осторожны с выводами в words
, которые могут вызвать расширение имени пути.
for A in $(echo '*'); do echo "$A"; done
Покажет ваши файлы вместо буквального *
.
$()
также рекомендуется в качестве более четкого синтаксиса для подстановки команд в Bash и оболочках POSIX, чем обратные ссылки (`
), и он поддерживает вложенность.
Более чистые решения для считывания выходных данных в переменные
while read VAR; do
...
done < <(do something)
и
read ... < <(do something) ## Could be done on a loop or with readarray.
for A in "${ARRAY[@]}"; do
:
done
Использование printf также может быть более простой альтернативой для предполагаемой функции:
printf '%s\n' {1..2} > out.dat