web-dev-qa-db-fra.com

Les points-virgules sont 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 points-virgules sont-ils totalement superflus dans le fragment ci-dessus? Et y a-t-il une raison pour que certaines personnes utilisent le double point-virgule?

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

81
Nagel

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

124

Selon 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>

Ainsi, le ; peut être un métacaractère ou un opérateur de contrôle, tandis que le ;; est toujours un opérateur de contrôle (dans le cas d'une commande).

Dans votre code particulier, tous les ; en fin de ligne ne sont pas nécessaires. Le ;; est nécessaire cependant.

24
Michał Šrajer

Dans le cas particulier de find, est utilisé pour mettre fin aux commandes invoquées par -exec. Voir la réponse de @kenorb à cette question .

4
DanielGKiel

@ Opensourcebook-Amit

les nouvelles lignes équivalentes à un seul point-virgule (;) sur un terminal ou dans un script Shell.

Voir les exemples ci-dessous:

Sur termainal: [Test root @ server] # ls; pwd;


Sur le script shell:

[root @ server test] # cat test4.sh

echo "Nom d'utilisateur actuel:" whoami

echo -e "\ nDate en cours:"; date;

[test root @ server] #

Mais je ne suis pas d'accord avec le commentaire qui équivaut à newline ou à un point-virgule

& est exécuté les commandes en arrière-plan également un séparateur de commande mais ne fonctionne pas comme point-virgule ou nouvelle ligne.

0
Amit Ganvir