Point-virgule dans les structures conditionnelles

35

Pourquoi mettre des points-virgules dans l'un et pas dans un autre?

le résultat est le même

Code un

if [ "a" == "a" ]
then
 echo "true"
fi

Code deux

if [ "a" == "a" ];
then
 echo "true";
fi

Les points-virgules dans le deuxième code sont inutiles?

Quand il est nécessaire de placer des points-virgules?

Jhonathan
la source
2
Cela a été suffisamment et correctement répondu, mais je voulais que le PO le sache également; remplace simplement n'importe quelle fin de ligne afin que vous puissiez combiner deux commandes en une seule ligne, par exemple:svn up; make
Aaron D. Marasco le
1
Notez également que deux points-virgules ;;sont utilisés pour séparer les correspondances dans les instructions case. ;;est nécessaire ici, pas optionnel ... mais ce ;;n'est pas la même chose que ;ou ; ;, ça y ressemble un peu. Les points-virgules simples ;fonctionnent normalement dans les parties COMMANDS des déclarations de cas.
cas

Réponses:

31

Le point-virgule est nécessaire uniquement lorsque la fin de ligne est manquante:

if [ "a" == "a" ] ; then echo "true" ; fi

Sans points-virgules, vous obtenez une erreur de syntaxe.

Je ne comprends pas votre question sur les citations. Peux-tu être plus précis?

(Et au fait, utiliser à la =place de ==est plus portable et compatible POSIX).

choroba
la source
Les citations dans le deuxième code sont inutiles?
Jhonathan
2
Toutes les citations dans les deux exemples sont inutiles.
Choroba
6

Le point-virgule est souvent utilisé, car certaines personnes (par exemple, moi) aiment un style comme celui-ci:

if [ ... ]; then
   doit-it-then
else
   doit-it-else
fi

Ainsi, si le mot-clé then est placé sur la ligne de condition, il est nécessaire car une nouvelle commande est démarrée, telle qu’elle a été écrite par choroba.

En ce qui concerne les guillemets dans le contrôle de condition, ils sont souvent utilisés avec des variables pour s'assurer qu'aucune exception ne se produit si rien n'est affecté à la variable. Ceci est un style plus sûr et ne semble pas nécessaire, mais même dans la programmation shell, il est parfois nécessaire de faire en sorte que des programmes soient traités, même si le contenu ne peut pas être affecté à des variables. Ensuite, la commande fonctionne toujours car une chaîne vide est comparée.

Loup
la source