2011-11-02 9 views
5

Da questa pagina web:Convenzione di Bash per if; poi

http://tldp.org/LDP/abs/html/abs-guide.html

E 'menzionato l'utilizzo della staffa se poi convenzione che hanno bisogno di uno spazio dopo la virgola:

;

Command separator [semicolon]. Permits putting two or more commands on the same line. 

echo hello; echo there 


if [ -x "$filename" ]; then # Note the space after the semicolon. 
#+     ^^ 
    echo "File $filename exists."; cp $filename $filename.bak 
else #      ^^ 
    echo "File $filename not found."; touch $filename 
fi; echo "File test complete." 

Note that the ";" sometimes needs to be escaped. 

Qualcuno sa dove è questo proviene e se ciò è necessario a tutti da alcune conchiglie?

risposta

8

Questo è diventato lo stile negli ultimi anni:

if [ -x "$filename" ]; then 
    echo "hi" 
fi 

Tuttavia, quando ancora i dinosauri come Burroughs e Sperry Rand dominavano la terra, ho imparato a scrivere, se affermazioni come questa:

if [ -x "$filename" ] 
then 
    echo "hi" 
fi 

Quindi, non è nemmeno necessario un punto e virgola.

Il nuovo stile con then sulla stessa linea come il if iniziato al fine di emulare il modo C e altri linguaggi di programmazione hanno fatto i loro if dichiarazioni:

if (! strcmp("foo", "bar")) { 
    printf "Strings equal\n"; 
} 

questi linguaggi di programmazione messo la parentesi graffa di apertura sul stessa riga di if.

+0

C non richiede di mettere la parentesi graffa di apertura sulla stessa linea. è una convenzione di codifica e molte persone non amano questo metodo [https://softwareengineering.stackexchange.com/questions/2715/should-curly-braces-appear-on-the-own-line] – mightyWOZ

0

Lo spazio dopo il punto e virgola non è richiesto dalla sintassi per qualsiasi shell che conosco, ma è di buon stile e rende il codice più facile da leggere.

Suppongo che la dicitura "a volte debba essere sfuggita" si riferisca a casi come echo foo\;bar, in cui non si desidera che il punto e virgola venga interpretato come separatore dalla shell.

0

Non credo che lo spazio dovrebbe essere necessario lì. Non c'è nulla nel richiedere spazi nello POSIX sh spec.

Empiricamente, i seguenti lavori bene sia bash 4.1.5 (1) e dash:

$ if true;then echo hi;else echo bye;fi 
hi 
$ 
5

virgola ; è un operatore (non un parola, come bretelle { } o uno scoppio !) in Shell, quindi non ha bisogno di essere delimitato con lo spazio bianco per essere riconosciuto in qualsiasi shell conforme a POSIX.

Tuttavia, ciò migliora la leggibilità (per i miei gusti).

Il punto e virgola deve essere evaso se si intende un simbolo "punto e virgola", non un operatore.

0

Non ho mai trovato una shell che richiedesse uno spazio in quel contesto. Giusto per essere sicuro, ho chiesto su c.u.s., puoi leggere le risposte here.

Problemi correlati