блогер прав. однако важно точно отметить синтаксис: если вы используете интерактивную оболочку (например, терминал)
echo -n; for i in {1..5}; do if [[ $? ]]; then foo; fi; done
"$?"возвращает состояние предыдущего вызова функции; поскольку мы сначала вызываем" echo ", первой итерацией цикла будет" true "(0 в bash.)," fi "закрывает оператор" if ", и точки с запятой необходимы.
вот то же самое, если вы писали bash-скрипт:
#!/ Бен / Баш
эхо-н
для меня в {1..5}; делать
если [[$? ]]; затем
Foo
фи
сделанный
вы заметите, что после foo нет точки с запятой; при написании полноценного bash-скрипта в среде, где доступны разрывы строк (например, ваш любимый текстовый редактор,) разрывы строк делают то же самое, что и точки с запятой :)
также обратите внимание, что вы могли бы вместо этого использовать
[[ $? ]] && foo
вместо оператора if; понимать, что && означает, что foo будет выполняться только в том случае, если в предыдущем foo не было ошибки. т.е. в вызове функции
thing1 && thing2
thing2 будет выполняться, только если thing1 работает нормально (технически, если он возвращает значение 0), чтобы игнорировать, работает ли foo или нет, используйте точки с запятой вместо &&