/ / Bash ако синтаксисът на изявлението [duplicate] - bash

Баш, ако синтактичната грешка в изявлението [дубликат] - баш

Аз съм на загуба, защо това дава грешка в синтаксиса. Някакви мисли?

#!/bin/bash

if [ `date +%H` -lt 11 ] ; then exit 0;
fi

if [ `date +%H` -gt 14 ] ; then
if[ `date +%H` -lt 20 ] ; then  # <--- this line is the culprit, it seems
exit 0;
fi
fi

Когато бягам, получавам:

./get.sh: line 7: syntax error near unexpected token `then"
./get.sh: line 7: `  if[ `date +%H` -lt 20 ] ; then "

Отговори:

4 за отговор № 1

Причината за това е, че това е грешка в синтаксиса [ не е част от синтаксиса на обвивката, всъщност е команда. Първоначално това беше само символна връзка към test команда. Все още е, но също така е вградена команда в баши и други черупки, получени от Бур.

if е ключова дума, но черупката вижда if[, не if, Защото не го видя if, той не знае какво да прави, когато вижда then, (Всъщност той знае точно какво да прави: отпечатва синтаксисно съобщение за грешка.)

...

Малко експерименти показват, че това не е толкова просто, колкото си мислех, че е. Опитах се да създам команда, наречена if[ и го поставя в директория в моя $PATH, Когато пиша точно if[ по бързината, черупката иска повече информация. Аз всъщност не знам какво търси, но очевидно е [ характер се обработва специално от обвивката. Черупката просто не се разделя if[ в if ключова дума и [ команда (както може основателно да очаквате въз основа на това как работят другите езици). (Ако наистина исках да изпълня тази команда, мога да напиша if[ или "if[" - или първо да му дадете скромно име.

Във всеки случай тази последна част вероятно няма значение, добавянето на интервал ще отстрани проблема.


1 за отговор № 2

Добавете интервал преди [

if [ `date +%H` -lt 20 ]

1 за отговор № 3
if[ `date +%H` -lt 20 ] ;

трябва да поставите интервал след това if

if [ `date +%H` -lt 20 ] ;