J'utilise une condition assez simple qui fonctionne sauf pour les phrase avec un espace :
if [[ "$test" =~ $rgx ]];then
echo "trouvé"
fi
Je ne comprend pas, j'ai pourtant bien mis les guillemets doubles et il note pour test = 'a a' : ./test.sh: ligne 26 : [: a : opérateur binaire attendu !
Et si quelqu'un pouvait m’éclairer sur le différence entre ${test} et $test ?
les accolades ne sont utiles que lorsqu'il y a du texte accolé au nom de la variable :
$ var="ga bu zo meu"
$ echo "$var"
ga bu zo meu
$ echo "$varPeuImporte" #aucune variable n'existe avec ce nom
$ echo "${var}PeuImporte"
ga bu zo meuPeuImporte
il doit y avoir autre chose (un espace insécable peut-être), a priori ça doit fonctionner tel quel.
- Edité par dantonq 9 septembre 2019 à 3:53:22
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
J'utilise une condition assez simple qui fonctionne sauf pour les phrase avec un espace :
if [[ "$test" =~ $rgx ]];then
echo "trouvé"
fi
Je ne comprend pas, j'ai pourtant bien mis les guillemets doubles et il note pour test = 'a a' : ./test.sh: ligne 26 : [: a : opérateur binaire attendu !
Et si quelqu'un pouvait m’éclairer sur le différence entre ${test} et $test ?
Merci d'avance
- Edité par bbsebb il y a environ 8 heures
Bonjour,
Que contiennent les variables ?
Pour éviter les confusions, je changerais le nom de la variable "test" car c'est aussi le nom d'une commande (Cf. man test).
Si tu ne comprends pas ce qui se passe, je te conseille de mettre
set -x
echo "test=<$test> rgx=<$rgx>"
avant le " if "
- Edité par BugHunt3r 9 septembre 2019 à 10:16:06
Pensez a mettre +1 aux messages qui vous ont aidé et mettre résolu quand cela l'est.
J'utilise une condition assez simple qui fonctionne sauf pour les phrase avec un espace :
if [[ "$test" =~ $rgx ]];then
echo "trouvé"
fi
Je ne comprend pas, j'ai pourtant bien mis les guillemets doubles et il note pour test = 'a a' : ./test.sh: ligne 26 : [: a : opérateur binaire attendu !
Et si quelqu'un pouvait m’éclairer sur le différence entre ${test} et $test ?
Il faut aussi des guillemets doubles pour $rgx, parce que sinon, si test=a et rgx="b c", la première ligne s'expanse en
if [[ "test" =~ a b ]]; then
et on se retrouve avec un b parasite dans le test.
A propos du nom test :
c'est en général une mauvaise idée d'appeler un exécutable ou une fonction test , parce qu'il existe déjà, non pas un, mais deux "test" : la commande interne du shell, et /bin/test
pour une variable c'est aussi une mauvaise idée, mais pour des raisons de programmation : ça ne dit pas la signification du test que ça représente.
- Edité par michelbillaud 9 septembre 2019 à 13:41:52
les guillemets sont facultatifs dans les tests améliorés ([[ ]]). le shell ajoute les protections nécessaires; ce qu'il ne fait pas pour les tests POSIX, pour lesquels les guillemets sont indispensables.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Je suis d'accord avec toi pour le simple crochet "[" qui est l'équivalent de "test"...
Mais il utilise le double crochet "[[" qui est plus permissif et permet d'utiliser des opérateurs que "test" ne gère pas.
Le "=~" est l'équivalent d"un grep sur une chaine et le "set -x" permet de voir comment elle est évaluée
Dans mon script je n'initialise pas les deux variables : il faut qu'elles aient été exportées pour être utilisables, c'est pour cette raison que je lui demande de faire un "echo" du contenu de celles-ci.
Bien à toi.
- Edité par BugHunt3r 9 septembre 2019 à 15:23:40
Pensez a mettre +1 aux messages qui vous ont aidé et mettre résolu quand cela l'est.
La programmation en shell, ça a toujours été le bordel, ça s'est pas arrangé :-)
opérateur binaire attendu ?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
<< On n'apprend bien qu'à force de se tromper. >>
il doit y avoir autre chose (un espace insécable peut-être), a priori ça doit fonctionner tel quel.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Pensez a mettre +1 aux messages qui vous ont aidé et mettre résolu quand cela l'est.
Pensez a mettre +1 aux messages qui vous ont aidé et mettre résolu quand cela l'est.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Pensez a mettre +1 aux messages qui vous ont aidé et mettre résolu quand cela l'est.