<Precedenti | Contenuti | Succ.>
Citazioni mancanti
Se modifichiamo il nostro script e rimuoviamo la virgoletta finale dall'argomento che segue il primo
comando echo:
#! / Bin / bash
# problema: script per dimostrare errori comuni numero=1
if [ $numero = 1 ]; poi
echo "Il numero è uguale a 1.
altro
echo "Il numero non è uguale a 1."
fi
#! / Bin / bash
# problema: script per dimostrare errori comuni numero=1
if [ $numero = 1 ]; poi
echo "Il numero è uguale a 1.
altro
echo "Il numero non è uguale a 1."
fi
Guarda cosa succede:
[io@linuxbox~]$ guaio
/home/me/bin/trouble: riga 10: EOF inaspettato durante la ricerca di `"' corrispondente
/home/me/bin/trouble: riga 13: errore di sintassi: fine del file imprevista
[io@linuxbox~]$ guaio
/home/me/bin/trouble: riga 10: EOF inaspettato durante la ricerca di `"' corrispondente
/home/me/bin/trouble: riga 13: errore di sintassi: fine del file imprevista
Genera due errori. È interessante notare che i numeri di riga riportati dai messaggi di errore non si riferiscono al punto in cui è stata rimossa la virgoletta mancante, ma piuttosto a una posizione molto più avanzata nel programma. Se seguiamo il programma dopo la virgoletta mancante, possiamo capirne il motivo. bash continuerà a cercare la citazione di chiusura finché non ne trova una, cosa che fa, subito dopo la seconda eco comando. Dopo di che, bash diventa molto confuso. La sintassi del successivo if il comando è interrotto perché il fi l'istruzione è ora all'interno di una stringa tra virgolette (ma aperta).
Negli script lunghi, questo tipo di errore può essere piuttosto difficile da individuare. L'utilizzo di un editor con evidenziazione della sintassi può essere d'aiuto, poiché, nella maggior parte dei casi, visualizzerà le stringhe tra virgolette in modo diverso rispetto ad altri tipi di sintassi shell. Se si dispone di una versione completa di vim è installato, l'evidenziazione della sintassi può essere abilitata immettendo il comando:
:sintassi attiva
:sintassi attiva