2011-09-21 15 views
72

Tengo un script que contiene los siguientes:¿Los puntos y coma superfluos al final de una línea en los guiones del intérprete de comandos?

case $1 in 
    0) 
    echo $1 = 0; 
    OUTPUT=3;; 
    1) 
    echo $1 = 1; 
    OUTPUT=4;; 
    2) 
    echo $1 = 2; 
    OUTPUT=4;; 
esac 

HID=$2; 
BUNCH=16; 
LR=.008; 

son punto y coma completamente superfluo en el fragmento anterior? ¿Y hay alguna razón para que algunas personas usen puntos y comas dobles?

Parece que los puntos y comas son solo un separador, algo que utilizaría en lugar de una nueva línea.

Respuesta

105

Los puntos y comas simples al final de una línea son superfluos, ya que la nueva línea también es un separador de comandos. case específicamente necesita punto y coma doble al final del último comando en cada bloque de patrón; ver help case para más detalles.

+9

¡Estupendo! Entonces, si lo entiendo correctamente, puedo eliminar con seguridad cualquier punto y coma al final de cualquier línea, ¿pero nunca doblo? – Nagel

+5

Eso es correcto. –

22

Según man bash:

metacharacter 
     A character that, when unquoted, separates words. One of the following: 
     | & ; () < > space tab 
    control operator 
     A token that performs a control function. It is one of the following symbols: 
     || & && ; ;; () | |& <newline> 

Así, el ; puede haber metacarácter u operador de control, mientras que el ;; es siempre un operador de control (al mando caso).

En su código particular, todos los ; al final de la línea no son necesarios. Sin embargo, se necesita ;;.

4

En el caso especial de encontrar,; se usa para terminar comandos invocados por -exec. Vea la respuesta de @kenorb a este question.

1

@Ignacio Vazquez-Abrams

En realidad esto no es del todo punto y coma precisos, solo al final de una línea son no superfluo y definitivamente no son lo mismo que las nuevas líneas.

De los Bash Reference Manual

Comandos separadas por un ‘;’ son ejecutados secuencialmente; el shell espera para que cada comando termine por turno. El estado de devolución es el estado de salida del último comando ejecutado.

comandos que están separadas por "nueva línea" podrían ejecutados en paralelo cuando los comandos separados por punto y coma son siempre ejecutan secuencialmente

+4

Esto es falso. No hay diferencia. Si lee la misma sección del manual correctamente, verá esto, unas pocas líneas arriba: 'Una secuencia de una o más líneas nuevas puede aparecer en una lista para delimitar comandos, equivalente a un punto y coma. Entonces, ¿qué es lo que citó? sobre el punto y coma se aplica igualmente a las nuevas líneas. –

+1

Estoy de acuerdo en que esta frase es ambigua, creo que lo que el autor quiso decir es que ";" y "\ n" se pueden usar más de una vez para separar comandos, pero no es que estén haciendo lo mismo. He encontrado este enlace: http://unix.stackexchange.com/questions/53390/is-there-a-way-to-run-process-parallelly-in-the-loop-of-a-bash-script Tampoco sabía esto antes de que realmente tuviera un problema con un script que escribí y me indicaron la diferencia entre ";" y "\ n" por uno de mis colegas. Lamentablemente, esto fue hace mucho tiempo y no puedo recordar lo que era publicar un ejemplo aquí. –

+2

si quiere leer la publicación que ha vinculado a @IJ, verá que el paralelismo proviene de '&' y no de '\ n'. En un comentario se dice que puede omitir el punto y coma porque aparentemente, '&' también es un separador de comandos como ';' y '\ n'. – Matthias

0

@ Opensourcebook-Amit

saltos de línea equivalente a solo punto y coma (;) en el terminal o en el script de shell.

Ver los siguientes ejemplos:

En termainal: [root @ servidor de prueba] # ls; pwd;


El script de shell:

[root @ servidor de prueba] # cat test4.sh

echo "nombre de usuario:" whoami

echo -e "\ nCurrent Fecha: ";fecha;

[raíz de prueba del servidor @] #

Pero no estoy de acuerdo con el comentario de que & es equivalente al salto de línea o de un solo punto y coma

& es ejecutar comandos en el fondo también es un separador de comandos, pero no funcionó como punto y coma o nueva línea.

Cuestiones relacionadas