Punto e virgola in strutture condizionali


35

Perché mettere i punti e virgola in uno e non in un altro?

Il risultato è lo stesso

Codice uno

if [ "a" == "a" ]
then
 echo "true"
fi

Codice due

if [ "a" == "a" ];
then
 echo "true";
fi

I punti e virgola nel secondo codice non sono necessari?

Quando è necessario posizionare i punti e virgola?


2
A tale risposta è stata data una risposta adeguata e adeguata, ma volevo che anche l'OP lo sapesse; sostituisce qualsiasi fine riga, in modo da poter combinare due comandi in una riga, ad esempio:svn up; make
Aaron D. Marasco,

1
Si noti inoltre che due punti e virgola ;;vengono utilizzati per separare le corrispondenze nelle istruzioni del caso. ;;è richiesto qui, non opzionale .... ma ;;non è la stessa cosa di ;o ; ;, sembra solo un po 'simile. I punti e virgola singoli ;funzionano normalmente nelle parti COMANDI delle dichiarazioni di un caso.
Cas

Risposte:


31

Il punto e virgola è necessario solo quando manca la fine della riga:

if [ "a" == "a" ] ; then echo "true" ; fi

Senza punto e virgola, viene visualizzato l'errore di sintassi.

Non capisco la tua domanda sulle citazioni. Può essere più preciso?

(E a proposito, usando =invece di ==è più portatile e conforme POSIX).


Le citazioni nel secondo codice non sono necessarie?
Jhonathan,

2
Tutte le virgolette in entrambi i campioni sono inutili.
Choroba,

6

Il punto e virgola viene spesso utilizzato, perché ad alcune persone (ad esempio me) piace uno stile come questo:

if [ ... ]; then
   doit-it-then
else
   doit-it-else
fi

Quindi, se la parola chiave then viene posizionata sulla riga delle condizioni, è necessaria perché inizia un nuovo comando, come scritto da Choroba.

Per quanto riguarda le virgolette nel controllo delle condizioni, vengono spesso utilizzate con le variabili per assicurarsi che non si verifichino eccezioni se non viene assegnato nulla alla variabile. Questo è uno stile più sicuro e sembra inutile, ma anche nella programmazione della shell ha fatto di tanto in tanto programmi elaborati sebbene i contenuti non possano essere assegnati alle variabili. Quindi il comando funziona ancora perché viene confrontata una stringa vuota.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.