bonjour,
j aimerais savoir la différence qu'il y a entre [[ condition ]] et [ condition ]. j ai fait des tests chez moi mais je ne vois pas de différence! j'ai demandé autour de moi personne ne le sait ! si qqn pourrait m'aider...
merci
Forum Programmation.shell différence entre [[ condition ]] et [ condition ]
18
juin
2005
# Qlqs différences
Posté par tgl . Évalué à 10.
- expansion différente (pas de filename ou de word splitting dans le [[ ... ]], or c'est souvent ce qu'on ne veut pas justement, donc ça tombe bien)
- un opérateur =~ qui permet d'éviter bien des forks de grep et autres sed inutiles pour les cas simples
Comme ça là je n'en ai pas d'autre qui me vienne.[^] # Re: Qlqs différences
Posté par pifpaf . Évalué à 1.
Recemment j'ai voulu comparer dans un script si le non de mon fichier faisait 8 digits dans le nom. genre 12345678.pdf est valide
j'ai voulu ecrire quelque chose comme:
if [ $monfichier = [0-9]{8}.pdf ] then
echo "ok"
else
echo "nok"
fi
mais ca ne marche pas
y compris if [ $monfichier = [0-9]\{8\}\.pdf ] then ...
ou encore if [[ $monfichier = [0-9]\{8\}\.pdf ] ] then ...
une idée pour avoir des expression regulieres dans le test?
sinon j'ai du faire
if [ `expr $pdfFile : "^[0-9]\{8\}\.pdf$"` -eq 0 ] then echo nok
else echo ok
[^] # Re: Qlqs différences
Posté par tgl . Évalué à 2.
% [[ 12345678.pdf =~ [0-9]{8}.pdf ]] && echo "voila"
voila
Mais ça ne marche qu'en bash-3.0. En bash 2.x, tu n'as pas de "=~" pour faire des regexps, mais seulement des patterns testables avec "=". Ton test devient alors :
% [[ 12345678.pdf = [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].pdf ]] && echo "voila"
voila
...et c'est sûr, c'est moins joli. Dans ce cas là, effectivement, c'est effectivement plutôt par expr ou même grep ou autre qu'il faut passer.
Quant à utiliser des simples crochets, bah ça ne marchera de toute façon pas avec des regexp, et puis avec la version longue et moche ça ne marchera que si ton fichier est dans le répertoire courant et qu'il est le seul avec un nom de ce genre là. Bref l'expansion se fait sur les noms de fichiers, alors que tu veux un match sur une chaine. À éviter donc.
# glou
Posté par fmaz fmaz . Évalué à 4.
[ est un programme qui se trouve dans
/usr/bin, ce qui explique que [toto=titi]
ne fonctionne pas (le shell lance le programme [toto=titi])
alors que [ toto=titi ] oui.
# petit jeu
Posté par Lucas . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.