Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#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)


Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

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

Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

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à !


Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

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.

Hors ligne

#6 Le 20/05/2010, à 20:31

johndo

Re : [Résolu] Différence entre "[ un test ]" et "[[ un test ]]" ???

Bonsoir,

Hizoka a écrit :

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) wink
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 !


Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

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 smile

Hors ligne

Haut de page ↑