Я часто видел эту конструкцию в сценариях и использовал ее сам, но меня беспокоит, что я не могу найти ее в документации.
Пример:
[ -f file1 ] &&
[ -f file2 ] &&
echo "Both files exist." ||
echo "One or the other file doesn't exist."
Это также можно сделать с помощью обратной косой черты перед символами новой строки, как указано в man bash
:
If a \<newline> pair appears, and the backslash is not
itself quoted, the \<newline> is treated as a line continuation (that
is, it is removed from the input stream and effectively ignored).
Пример:
[ -f file1 ] && \
[ -f file2 ] && \
echo "Both files exist." || \
echo "One or the other file doesn't exist."
... но это не кажется необходимым. Первая версия выше работает даже без обратной косой черты.
Где я могу найти это в man bash
? (Кроме того, это bash
определенное или POSIX-совместимое?)
bash
shell-script
Wildcard
источник
источник
;
,&
,(
и)
.names=( Rama Soma<newline> Sita Diya )
. Python четко описывает их здесь, но документация по Bash, похоже, этого не делает.Ответы:
Новая строка игнорируется в нескольких контекстах, где явно присутствует неопределенная команда. Эти контексты включают в себя после того, как оператор управления (
&&
,||
,|
,&
,;
,;;
, но не!
).Я не вижу этого в руководстве по bash.
В POSIX это определяется с помощью правил грамматики . Везде, где есть правила
linebreak
, вы можете иметь ноль или более разрывов строк.источник
|
в начале следующей строки? Помните, что оболочка также используется в интерактивном режиме, а не только в сценариях, и грамматика одинакова.this && this2 && that
это хорошо, но дляelse
предложения я бы использовал фактическийif then else fi
.)