Envoyé par ripat
je n'ai pas dit ça.
j'en suis resté à l'évaluation arithmétique par le shell.![]()

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 : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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

Partager