/ / Bash if syntax error statement [duplicate] - bash

Bash if chyba syntaxe vyhlásenia [duplicate] - bash

Som v rozpakoch, prečo to spôsobuje chybu syntaxe. Máte nejaké myšlienky?

#!/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

Po spustení dostanem:

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

odpovede:

4 pre odpoveď č. 1

Dôvod, že ide o syntaktickú chybu, je ten [ nie je súčasťou syntaxe shellu; je to vlastne príkaz. Pôvodne to bol iba symbolický odkaz na test príkaz. Stále je, ale je to aj zabudovaný príkaz v bashe a iných mušliach odvodených od Bourneovej.

if je kľúčové slovo shellu, ale shell vidí if[, nie if. Pretože to nebolo vidieť if, nevie, čo má robiť, keď vidí then. (Vlastne presne vie, čo má robiť: vytlačiť chybové hlásenie o syntaxi.)

...

Trochu experimentovania ukazuje, že to nie je také jednoduché, ako som si myslel. Skúšal som vytvoriť príkaz s názvom if[ a vložením do adresára v mojom $PATH. Keď píšem len if[ po výzve shell požiada o viac informácií. Vlastne neviem, čo hľadá, ale zjavne [ znak je špeciálne upravený škrupinou. Škrupina sa jednoducho nerozdelí if[ do if kľúčové slovo a [ príkaz (ako môžete rozumne očakávať na základe toho, ako fungujú iné jazyky). (Ak by som naozaj chcel vykonať tento príkaz, mohol by som napísať if[ alebo "if[" - alebo mu v prvom rade dať rozumné meno.

V každom prípade táto posledná časť pravdepodobne nevadí; pridaním medzery sa problém vyrieši.


1 pre odpoveď č. 2

Predtým pridajte medzeru [

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

1 pre odpoveď č. 3
if[ `date +%H` -lt 20 ] ;

po ňom musíte umiestniť medzeru if

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