[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: логическое И (and) error: line 27: [: пропущен `]'



Alexander Galanin -> debian-russian@lists.debian.org  @ Wed, 4 Dec 2013 00:05:39 +0400:

 >> Ну, если учитывать предыдущий абзац, то Вы тоже из головы придумываете
 >> правила, потому что if - не "команда" с аргументами. Не то, чтобы это

 AG> Я всего лишь придерживаюсь терминологии из документации, где if — команда:
 AG> http://www.gnu.org/software/bash/manual/bash.html#Conditional-Constructs

Внимание, команда там не if, а вся конструкция, от if до fi.  if - _одно
из_ служебных слов, формирующих команду.  В частности, скрипт

if true

вызовет синтаксическую ошибку:

% sh -c 'if true'
sh: 1: Syntax error: end of file unexpected (expecting "then")

Если бы if была командой, то синтаксической ошибки тут не было бы.

 AG> Потому эта интерпретация более красива для лисперов, но неточна:

 >> «if bebebe then ...» - команда bebebe с аргументом then
 >> «if bebebe; then ...» - команда bebebe без аргументов в качестве первого
 >> аргумента особой формы if (предиката), и начало следующего аргумента
 >> особой формы if.

Anyway, по смыслу if bebebe then - это не команда if с двумя аргументами
bebebe и then, а служебное слово if с одним аргументом, командой bebebe
then (командой bebebe с аргументом then).  Так что лисповская
интерпретация тут все же ближе к делу, чем идея считать if командой.

Да, можно было бы сказать, что несколько синтаксических аргументов if
составляют команду (как у sudo и find), если бы if синтаксически была
командой.  Но нет, if - это служебное слово, и "аргумент" у него один -
список команд.


Reply to: