#1 Le 20/05/2010, à 11:05
- Postmortem
[Résolu] Différence entre "[ un test ]" et "[[ un test ]]" ???
Salut !
J'ai une question qui me turlupine !!
$ [[ -d toto ]] && echo "Le répertoire toto existe" || echo "Le répertoire toto n'existe pas"
Le répertoire toto n'existe pas
$ [ -d toto ] && echo "Le répertoire toto existe" || echo "Le répertoire toto n'existe pas"
Le répertoire toto n'existe pas
Comme vous pouvez le voir, que l'on fasse le test avec [ ] ou avec [[ ]], le résultat est le même.
Donc quelle est la différence entre les 2 ? Dans quel cas utilise-t-on plutôt l'un que l'autre ??
Je me disais qu'on ne mettait qu'une paire de crochets avec le if mais apparemment, ça ne change pas grand chose :
$ if [ -d toto ]
then echo "Le répertoire toto existe"
else echo "Le répertoire toto n'existe pas"
fi
Le répertoire toto n'existe pas
$ if [[ -d toto ]]
then echo "Le répertoire toto existe"
else echo "Le répertoire toto n'existe pas"
fi
Le répertoire toto n'existe pas
Je sais, je me pose des questions à la con !
Dernière modification par Postmortem (Le 20/05/2010, à 11:19)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#2 Le 20/05/2010, à 11:12
- iuchiban
Re : [Résolu] Différence entre "[ un test ]" et "[[ un test ]]" ???
Salut,
Regarde sur ce site : http://abs.traduc.org/abs-fr/ch07.html
Il existe une commande dédiée appelée [ (caractère spécial crochet gauche). C'est un synonyme de test, qui est intégré pour des raisons d'optimisation. Cette commande considère ses arguments comme des expressions de comparaisons ou comme des tests de fichiers et renvoie un état de sortie correspondant au résultat de la comparaison (0 pour vrai et 1 pour faux).
Avec la version 2.02, Bash a introduit la commande de test étendue [[ ... ]], réalisant des comparaisons d'une façon familière aux programmeurs venant d'autres langages. Notez que [[ est un mot clé, pas une commande.
C'est la même chose mais [[ ]]est plus récent donc à privilégier.
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#3 Le 20/05/2010, à 11:18
- Postmortem
Re : [Résolu] Différence entre "[ un test ]" et "[[ un test ]]" ???
La vache, réponses supersonic !!!
Merci !!
En effet, avec une seule paire de crochet, le test ne reconnait pas l'opérateur =~ pour comparer avec une expression régulière.
Exemple :
$ toto=azeryty1234
$ [[ $toto =~ ^[0-9]+$ ]] && echo "Que des chiffres" || echo "Autre chose"
Autre chose
$ toto=164468
$ [[ $toto =~ ^[0-9]+$ ]] && echo "Que des chiffres" || echo "Autre chose"
Que des chiffres
$ [ $toto =~ ^[0-9]+$ ] && echo "Que des chiffres" || echo "Autre chose"
bash: [: =~: binary operator expected
Autre chose
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#4 Le 20/05/2010, à 11:19
- Postmortem
Re : [Résolu] Différence entre "[ un test ]" et "[[ un test ]]" ???
Merci iuchiban !
J'avais cru voir une réponse de helly (ou un nom s'en approchant) mais elle est plus là !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#5 Le 20/05/2010, à 18:27
- Hizoka
Re : [Résolu] Différence entre "[ un test ]" et "[[ un test ]]" ???
Un test avec double crochet :
test="bonjour toi"
if [[ ${test} == "bonjour toi" ]]
then
echo "idem"
fi
=> idem
le meme en simple :
if [ ${test} == "bonjour toi" ]
then
echo "idem"
fi
=> bash: [: trop d'arguments
if [ "${test}" == "bonjour toi" ]
then
echo "idem"
fi
=> idem
là, les doubles crochets évite de devoir mettre des " autour des variables.
if [[ ${test} == "bonjour toi" && ${test} != "salut toi" ]]
then
echo "idem"
fi
if [ "${test}" == "bonjour toi" && "${test}" != "salut toi" ]
then
echo "idem"
fi
=> bash: [: « ] » manquant
if [ "${test}" == "bonjour toi" ] && [ "${test}" != "salut toi" ]
then echo "idem"
fi
=> idem
Encore un autre exemple, impossible de faire plusieurs vérification avec un simple crochet alors que possible avec le double.
En gros il est beaucoup plus souple d'utiliser les doubles crochet.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#6 Le 20/05/2010, à 20:31
- johndo
Re : [Résolu] Différence entre "[ un test ]" et "[[ un test ]]" ???
Bonsoir,
Encore un autre exemple, impossible de faire plusieurs vérification avec un simple crochet alors que possible avec le double.
petite rectification : il est possible d'effectuer une combinaison de conditions avec les simples crochets :
[ a = c -o a = a ] && echo yes
le tout est d'utiliser les bons opérateurs de combinaison (il sont définis dans le man de l'instruction test)
A savoir :
-a pour le ET
-o : pour le OU
ils sont également précisés dans le man du bash mais également via info coreutils 'test invocation'
Hors ligne
#7 Le 20/05/2010, à 22:54
- Postmortem
Re : [Résolu] Différence entre "[ un test ]" et "[[ un test ]]" ???
Re-bonsoir à tous !
C'est ça que j'aime bien ici : on a la réponse à sa question ou à son problème, et en plus, on a la réponse à une autre question qu'on allait se poser !! :-)
MERCI !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#8 Le 21/05/2010, à 07:31
- Hizoka
Re : [Résolu] Différence entre "[ un test ]" et "[[ un test ]]" ???
johndo => je ne le savais pas, merci
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne