Heredocs nu poate fi indentat ca restul scriptului (cu excepția cazului în care utilizați -EOM
dar apoi puteți indenta numai cu file). La urma urmei, scopul heredoc-ului este să vă permită să scrieți ceva care va apărea asa cum este. Aceasta înseamnă că EOM
nu poate fi asa:
în timp ce ceva;
do
comanda <<EOM
Buna!
EOM
Terminat
În schimb, cel EOM
(sau orice alt marcat pe care îl utilizați) trebuie să fie singurul lucru de pe linie, deci fără spații albe sau orice altceva înainte sau după el. Ca aceasta:
în timp ce ceva;
do
comanda <<EOM
Buna!
EOM
Terminat
De asemenea, rețineți că, din motivele menționate mai sus, va fi inclus și spațiul alb principal, astfel încât acesta:
c=0;
în timp ce [ $c -eq 0 ];
do
pisica <<EOM
Buna!
EOM
lasă c++
Terminat
Ar tipări:
$ foo.sh
Buna!
În timp ce aceasta:
c=0;
în timp ce [ $c -eq 0 ];
do
pisica <<EOM
Buna!
EOM
lasă c++
Terminat
Ar tipări:
$ foo.sh
Buna!
În cele din urmă, când rulez scriptul, primesc o eroare diferită:
$ foo.sh
Momentan ma aflu in urmatorul director:
/home/terdon/foo
/home/terdon/scripts/foo.sh: linia 108: avertisment: aici-document la linia 84 delimitat de sfârșitul fișierului (dorit „EOM”)
/home/terdon/scripts/foo.sh: linia 109: eroare de sintaxă: sfârșit neașteptat al fișierului
Acest lucru se va datora faptului că nu dau aceleași date de intrare și, din moment ce nu ați terminat corect EOM, datele dumneavoastră au fost probabil procesate de script și de aceea ați văzut o eroare diferită. Mă aștept, totuși, că remedierea mea va scăpa de ea, deoarece îmi permite să rulez scriptul până la sfârșit pe mașina mea.