OVH Cloud OVH Cloud

Ksh - Comparaison de chaine

3 réponses
Avatar
Nicolas Ecarnot
Bonjour,

Dans un shell ksh, je souhaite comparer une variable avec une chaine.
Habituellement, je fais ainsi :

CHAINE='un test'
if [ ${CHAINE} = 'abcd' ]; then
...
fi

Mais si la CHAINE contient un espace, mon shell me dit :
[: un: unexpected operator

J'ai alors essayé :
if [ "$CHAINE" = 'abcd' ]; then
ou
if [ "${CHAINE}" = 'abcd' ]; then

mais rien n'y fait.

Comment puis-je m'en sortir ?

--
Nicolas Ecarnot

3 réponses

Avatar
Pascal Bourguignon
Nicolas Ecarnot writes:

Bonjour,

Dans un shell ksh, je souhaite comparer une variable avec une chaine.
Habituellement, je fais ainsi :

CHAINE='un test'
if [ ${CHAINE} = 'abcd' ]; then
...
fi

Mais si la CHAINE contient un espace, mon shell me dit :
[: un: unexpected operator

J'ai alors essayé :
if [ "$CHAINE" = 'abcd' ]; then
ou
if [ "${CHAINE}" = 'abcd' ]; then

mais rien n'y fait.

Comment puis-je m'en sortir ?


En utilisant bash?

$ chaine="a b c"
$ if [ "$chaine" = "a b c" ] ; then echo yes ; else echo no ; fi
yes
$ if [ "$chaine" = 'a b c' ] ; then echo yes ; else echo no ; fi
yes


--
__Pascal_Bourguignon__ http://www.informatimago.com/
There is no worse tyranny than to force a man to pay for what he doesn't
want merely because you think it would be good for him.--Robert Heinlein
http://www.theadvocates.org/

Avatar
Stephane Chazelas
2004-02-04, 15:10(+00), Nicolas Ecarnot:
CHAINE='un test'
if [ ${CHAINE} = 'abcd' ]; then
...
fi

Mais si la CHAINE contient un espace, mon shell me dit :
[: un: unexpected operator

J'ai alors essayé :
if [ "$CHAINE" = 'abcd' ]; then
[...]


Ben, si ça ne marche pas avec ça, il est vraiment carrément
buggé ton shell. (pourquoi tu mets "ksh" dans le subjet si c'est
pas du ksh?).

Note qu'avec certains shells/tests, tu peux avoir des problèmes
avec CHAINE='!' ou CHAINE='(' ou CHAINE='-<x>'.
Vaut mieux faire

[ abcd = "$CHAINE" ]
ou encore mieux
[ "z$CHAINE" = zabcd ]

Sinon, si tu veux être tranquille, utilise case:

case $CHAINE in
abcd) ... ;;
esac

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]

Avatar
Nicolas Ecarnot
Le 04-02-2004, Stephane Chazelas a écrit :
Ben, si ça ne marche pas avec ça, il est vraiment carrément
buggé ton shell. (pourquoi tu mets "ksh" dans le subjet si c'est
pas du ksh?).


C'est bien du ksh, mais je suis un polio.
Je viens de me rendre compte dans mon looooong script qu'une des conditions n'avait
pas été protégée.
J'ai essayé d'annuler cet article, mais on m'a malencontreusement payé un café
entre temps.

Je me répends en excuses et vous remercie encore de participer à ma compréhension
d'unix, amen.

--
Nicolas Ecarnot