Un shell conforme à POSIX doit fournir des mécanismes de ce type pour itérer sur des collections de chaînes de caractères :
for x in $(seq 1 5); do
echo $x
done
Mais comment itérer sur chaque caractère d'un mot ?
Un shell conforme à POSIX doit fournir des mécanismes de ce type pour itérer sur des collections de chaînes de caractères :
for x in $(seq 1 5); do
echo $x
done
Mais comment itérer sur chaque caractère d'un mot ?
C'est un peu compliqué, mais je pense que cela fonctionnera dans n'importe quel shell compatible avec posix. Je l'ai essayé dans dash
mais je n'ai pas de busybox à portée de main pour tester.
var='ab * cd'
tmp="$var" # The loop will consume the variable, so make a temp copy first
while [ -n "$tmp" ]; do
rest="${tmp#?}" # All but the first character of the string
first="${tmp%"$rest"}" # Remove $rest, and you're left with the first character
echo "$first"
tmp="$rest"
done
Sortie :
a
b
*
c
d
Notez que les guillemets entourant le côté droit des affectations ne sont pas nécessaires ; je préfère simplement utiliser des guillemets autour de toutes les expansions plutôt que d'essayer de savoir où il est prudent de les laisser. D'autre part, les guillemets doubles de [ -n "$tmp" ]
sont absolument nécessaires, et les doubles guillemets intérieurs de first="${tmp%"$rest"}"
sont nécessaires si la chaîne contient "*".
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.