Квадратные скобки после if
не являются синтаксисом оболочки, который может быть опущен или нет, в зависимости от стилистических предпочтений, это отдельная команда,test
. (Связанная справочная страница описывает внешнюю команду test
/ [
, но многие оболочки предоставляют собственную реализацию.)
Письмо
if [ tty -s ];
эквивалентно написанию
if test tty -s;
, а так как test
/ [
не имеет оператора tty
, он терпит неудачу.
if
следует команда, которую она запускает, и код выхода этой команды определяет, какая ветвь берется после if
:, если она равна 0, берется ветвь then
, в противном случае ветвь else
(, если есть ).