Анализатор видит then
вне оператора if
, потому что у вас нет ключевого слова if
в командной позиции. У вас есть слово if[-d
, которое анализатор принимает как обычное имя команды; синтаксический анализатор не знает или не заботится о том, существует ли команда на самом деле.
Пробелы важны:
if [ -d "$dname" ]
Скобки должны напоминать вам синтаксис, но, вероятно, вызвали больше беда, чем они когда-либо спасли. [
- это команда, и она требует ]
в качестве последнего аргумента. Использование имени test
намного проще и не дает вам повода думать, что скобки как-то особенные для синтаксического анализатора:
if test -d "$dname"