Des points-virgules superflus à la fin d’une ligne dans les scripts shell?

J’ai un script shell qui contient les éléments suivants:

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; 

Les pointsvirgules sont ils complètement superflus dans l’extrait ci-dessus? Et y a-t-il une raison pour que certaines personnes utilisent des points-virgules doubles?

Il semble que les points-virgules ne sont qu’un séparateur, quelque chose que vous utiliseriez à la place d’une nouvelle ligne.

Les points-virgules simples à la fin d’une ligne sont superflus, car la nouvelle ligne est également un séparateur de commandes. case spécifiquement besoin de doubles points-virgules à la fin de la dernière commande dans chaque bloc de modèle; voir l’ help case pour plus de détails.

Selon l’ 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: || & && ; ;; ( ) | |&  

Donc, le ; peut être métacaractère ou opérateur de contrôle, tandis que le ;; est toujours un opérateur de contrôle (en cas de commande).

Dans votre code particulier, tous ; à la fin de la ligne ne sont pas nécessaires. La ;; est nécessaire cependant.

Dans le cas particulier de la trouvaille, est utilisé pour terminer les commandes invoquées par -exec. Voir la réponse de @kenorb à cette question .

@ Opensourcebook-Amit

newlines équivalent à un seul point-virgule (;) sur un script terminal ou un script shell.

Voir les exemples ci-dessous:

Terminaux: [root @ server test] # ls; pwd;


Sur le script shell:

[root @ server test] # cat test4.sh

echo “Nom d’utilisateur actuel:” whoami

echo -e “\ nDate actuelle:”; date;

[root @ server test] #

Mais je ne suis pas d’accord avec le commentaire selon lequel & équivaut à newline ou single semicolon

& est des commandes d’exécution en arrière-plan également un séparateur de commande mais pas travaillé comme point-virgule ou nouvelle ligne.

@ Ignacio Vazquez-Abrams

En fait, ce n’est pas tout à fait exact, les points-virgules simples à la fin d’une ligne ne sont pas superflus et ne sont certainement pas la même chose que les nouvelles lignes.

A partir du manuel de référence de Bash

Commandes séparées par un ‘;’ sont exécutés séquentiellement; le shell attend que chaque commande se termine à son tour. Le statut de retour est le statut de sortie de la dernière commande exécutée.

Les commandes séparées par “nouvelle ligne” peuvent être exécutées en parallèle lorsque les commandes séparées par un point-virgule sont toujours exécutées de manière séquentielle