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: