:koi:Citation:
Envoyé par ripat
je n'ai pas dit ça.
j'en suis resté à l'évaluation arithmétique par le shell. :(
Version imprimable
:koi:Citation:
Envoyé par ripat
je n'ai pas dit ça.
j'en suis resté à l'évaluation arithmétique par le shell. :(
Bonjour,
ma petite contribution :)
Cordialement.Code:echo $(IFS=$':'; set `<fichier.tst`; echo $#)
Bonjour,
le signe dollar n'est pas utile.
pense que $LISTE peut contenir un tiret qui fera planter set : il faut lui indiquer la fin des options avec deux tirets set -- $var.
il n'a pas été question de fichier.tst.
le code ne tient pas compte de l'absence de :, et les champs vides au début et/ou à la fin de la variable.
Bonjour N_BaH,
Merci pour ces remarques, donc en tenant compte de celles-ci:
Cordialement.Code:
1
2
3
4
5
6
7
8 $ LISTE=':apres un champ initial vide:un autre champ:::apres deux champs et avant un dernier vides:' $ NF=$(IFS=':'; set -- `echo " $LISTE "`; echo $#) $ echo $NF 7 $ LISTE='sans les 2 points' $ NF=$(IFS=':'; set -- `echo " $LISTE "`; echo $#) $ echo $NF 1
maintenant, un champ vide, sans ':', (juste '') compte 1, alors qu'il doit rester à zéro.
utilise la liste de la boucle for, que j'avais testée.
Oui, je sais, on est dans le même cas que pour "tr"...
Voici une version qui corrige le problème (même si je trouve ta méthode plus "propre")
Cordialement.Code:
1
2
3
4
5
6
7
8
9 for str in '' "a" "a:" "a:b" "a:b:c" do echo $(IFS=':'; set -- `[ -z "$str" ] || echo " $str "`; echo $#) done 0 1 2 2 3
:ccool: