Баш для цикла работы в командной строке, но не удалось в сценарии - PullRequest
3 голосов
/ 15 августа 2011

Когда выполняется оператор for в командной строке debian bash, он работает нормально. Но когда я запускаю его в скрипте sh или запускаю с помощью команды bash, он сохраняет отчет «ошибка рядом с неожиданным токеном« do »» В чем разница?

[leon@www] ~/tmp $ for i in {1..10}; do echo $i; done
1
2
3
4
5
6
7
8
9
10
[leon@www] ~/tmp $ bash for i in {1..10}; do echo $i; done
-bash: syntax error near unexpected token `do'

Кстати, все отлично работает в сантиосе.

Ответы [ 3 ]

6 голосов
/ 15 августа 2011

Используйте параметр -c, чтобы bash считывал команды из передаваемой вами строки. Кроме того, используйте одинарные кавычки вокруг команды.

bash -c 'for i in {1..10}; do echo $i; done'
3 голосов
/ 15 августа 2011

ваша командная строка bash заканчивается первым;

, поэтому он выполняется отдельно как:

bash for i in {1..10};
do echo $i;
done

и man bash говорит, что аргумент команды должен быть файлом для загрузки: bash [опции] [файл]

0 голосов
/ 15 августа 2011

Вы можете обернуть весь ваш скрипт в кавычки или в файл. Потому что здесь вы делаете bash for i in {1..10}, затем do echo $i и так далее. Вам следует использовать опцию -c, если вы не поместили ее в файл.

...