, затем
и else
не являются программами. Остальные части есть. Обратите внимание, что непосредственно после них нет ;
', но после команды, которой они предшествуют.
[...]
является командой и требует ;
, если за ней следует начало другой команды.
AFAIK, все управляющие структуры в Bash и , вероятно, большинство * nix-оболочек, одинаковы. Это инструкции для переводчика. С другой стороны, тест или условие использует программу / процесс, которые «выполняются» и являются командами. Поскольку , то
является частью строки, которая ведет к команде echo
, она должна быть отделена новой строкой от предыдущей команды [...]
. Его не нужно отделять от команды, которую он контролирует, echo yes
.
С юридической точки зрения, хотя это некрасиво и трудночитаемо, вы тоже можете это сделать.
if [ $VARIABLE == abcdef ]
then echo yes
else echo no
fi
Обратите внимание, что здесь нет необходимости в ;
между элементами управления, даже если они не на своей линии.
Интересно, что вся управляющая структура ( if ... fi
) является командой оболочки, и вся структура должна заканчиваться новой строкой или ;
. Последняя строка не может быть fi echo done
, но должна быть fi; эхо сделано
. То же, что и присвоение VARIABLE = 'abcdef'
, является командой.
Несмотря на то, что все управляющие структуры являются командами, они все же не являются программами.