bash et case esac
Le
Kevin Denis
Bonjour,
j'ai une variable texte contenant une ligne avec des espaces et différents
caractères.
J'ai besoin de parser cette ligne car différentes actions doivent être
prises selon le début de celle ci.
J'ai choisi d'utiliser case/esac:
case $LINE in
aaa*)
do_aaa
;;
bbb*)
do_bbb
;;
esac
Mais j'ai un problème pour différencier:
aaa blablabla
aaaaa blablabla
Et mes tentatives à base de:
aaa\ .*)
do_aaa
;;
ne fonctionnent pas.
Pourquoi? Ceci j'utilise case/esac mais s'il y a mieux, je prends.
Merci
--
Kevin
j'ai une variable texte contenant une ligne avec des espaces et différents
caractères.
J'ai besoin de parser cette ligne car différentes actions doivent être
prises selon le début de celle ci.
J'ai choisi d'utiliser case/esac:
case $LINE in
aaa*)
do_aaa
;;
bbb*)
do_bbb
;;
esac
Mais j'ai un problème pour différencier:
aaa blablabla
aaaaa blablabla
Et mes tentatives à base de:
aaa\ .*)
do_aaa
;;
ne fonctionnent pas.
Pourquoi? Ceci j'utilise case/esac mais s'il y a mieux, je prends.
Merci
--
Kevin

Poser une question


Pourquoi mets-tu un point ?
Le problème, ce n'est pas case, c'est bash. Pour des tâches un tant soit peu
complexes, il vaut mieux utiliser un vrai langage.
Bonjour Kévin,
Si tous les mots de votre ligne sont séparés par des éléments de $IFS
(comme l'espace) et que c'est le premier mot qui détermine le
traitement, vous pouvez toujours contourner le problème en utilisant un
artifice du genre:
set -- $LINE # decompose $LINE dans les parametres positionnels $1 et
suivants
case $1 in
aaa)
do_aaa
;;
etc.
--
Bruno Tréguier
Et aussi :
for LINE in "aaa blablabla" "aaaaa blablabla" ; do
case "$LINE" in
aaa *)
echo $LINE : 3a
;;
aaa*)
echo $LINE : 5a
;;
esac
done
--
Philippe