Аз съм на загуба, защо това дава грешка в синтаксиса. Някакви мисли?
#!/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 ] ;