Je suis un peu confus quant à ce que ces opérateurs font différemment lorsqu'ils sont utilisés dans bash (crochets, doubles crochets, parenthèses et doubles parenthèses).
[[ , [ , ( , ((
J'ai vu des gens les utiliser sur des déclarations if comme celle-ci :
if [[condition]]
if [condition]
if ((condition))
if (condition)
Réponse acceptée :
Dans les shells de type Bourne, un if
l'instruction ressemble généralement à
if
command-list1
then
command-list2
else
command-list3
fi
Le then
la clause est exécutée si le code de sortie de la command-list1
la liste des commandes est nulle. Si le code de sortie est différent de zéro, alors le else
clause est exécutée. command-list1
peut être
simple ou complexe. Il peut, par exemple, s'agir d'une séquence d'un ou plusieurs pipelines séparés par l'un des opérateurs ;
, &
, &&
, ||
ou saut de ligne. Le if
les conditions indiquées ci-dessous ne sont que des cas particuliers de command-list1
:
-
if [ condition ]
[
est un autre nom pour letest
traditionnel commande.[
/test
est un utilitaire POSIX standard. Tous les shells POSIX l'ont intégré (bien que ce ne soit pas requis par POSIX²). Letest
La commande définit un code de sortie et leif
déclaration agit en conséquence. Les tests typiques consistent à déterminer si un fichier existe ou si un nombre est égal à un autre. -
if [[ condition ]]
Il s'agit d'une nouvelle variante améliorée de
test
¹ de ksh ce coup , zsh , yash , busybox sh également soutenir. Ce[[ ... ]]
la construction définit également un code de sortie et leif
déclaration agit en conséquence. Parmi ses fonctionnalités étendues, il peut tester si une chaîne correspond à un modèle générique (pas dans busybox sh ). -
if ((condition))
Un autre ksh extension qui bash et zsh également soutenir. Cela effectue de l'arithmétique. À la suite de l'arithmétique, un code de sortie est défini et le
if
déclaration agit en conséquence. Il renvoie un code de sortie de zéro (vrai) si le résultat du calcul arithmétique est différent de zéro. Comme[[...]]
, ce formulaire n'est pas POSIX et n'est donc pas portable. -
if (command)
Cela exécute la commande dans un sous-shell. Lorsque la commande se termine, elle définit un code de sortie et le
if
déclaration agit en conséquence.Une raison typique d'utiliser un sous-shell comme celui-ci est de limiter les effets secondaires de la
command
sicommand
les affectations de variables requises ou d'autres modifications de l'environnement du shell. Ces modifications ne restent pas après la fin du sous-shell. -
if command
la commande est exécutée et le
if
l'instruction agit en fonction de son code de sortie.