2011-11-02 16 views
5

Desde esta página web:Bash convención para si; entonces

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

Es mencionado el uso del soporte si luego convención que necesitan un espacio después de la coma:

;

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. 

¿Alguien sabe dónde viene esto y si esto es necesario en absoluto por ciertas conchas?

Respuesta

8

Esto se ha convertido en el estilo en los últimos años:

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

Sin embargo, en la época dinosaurios como Burroughs y Sperry Rand dominaban la tierra, he aprendido a escribir si declaraciones como esta:

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

Entonces, ni siquiera necesita un punto y coma.

El nuevo estilo con then en la misma línea que el if comenzó con el fin de emular la forma C y otros lenguajes de programación que hicieron sus if declaraciones:

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

estos lenguajes de programación ponen la llave de apertura en el misma línea que el if.

+0

C no requiere que coloque la llave de apertura en la misma línea. es una convención de codificación y a muchas personas no les gusta este método [https://softwareengineering.stackexchange.com/questions/2715/should-curly-braces-appear-on-their-own-line] – mightyWOZ

0

El espacio después del punto y coma no es requerido por la sintaxis para ningún shell que conozca, pero es un buen estilo y hace que el código sea más fácil de leer.

Supongo que la fraseología "a veces debe escaparse" se refiere a casos como echo foo\;bar, donde no desea que el combo interprete el punto y coma como un separador.

0

No creo que el espacio deba ser necesario allí. No hay nada sobre la necesidad de espacios en el POSIX sh spec.

Empíricamente, las siguientes obras excelentes, tanto en bash 4.1.5 (1) y dash:

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

punto y coma ; es un operador (no una palabra clave, como llaves { } o una explosión !) en Shell, por lo que no necesita ser delimitado con espacios en blanco para ser reconocido en ningún shell que cumpla POSIX.

Sin embargo, hacerlo mejora la legibilidad (para mi gusto).

Semicolon debe escaparse si se refiere a un símbolo "punto y coma", no a un operador.

0

Nunca me he encontrado con un shell que requiera espacio en ese contexto. Solo para asegurarse, he pedido en c.u.s., puede leer las respuestas here.

Cuestiones relacionadas