On 2006-12-15 11:59:51 +0100, Philippe Jacquot wrote:
for i in $(seq 97 122); do hex=$(printf %x $i); echo -e "\x"$hex; done
Pas POSIX. En particulier, ça ne fonctionne pas avec dash. C'est un peu ce que je disais pour for i in {97..122}; do printf "\x`printf %x $i`\n"; done concernant le \x. D'ailleurs, echo a des comportements très différents suivant les implémentations, et c'est pour cela qu'on conseille d'utiliser printf à la place. C'est même dit explicitement par POSIX: It is not possible to use echo portably across all POSIX systems unless both -n (as the first argument) and escape sequences are omitted. [...] New applications are encouraged to use printf instead of echo. Cf <http://www.opengroup.org/onlinepubs/009695399/utilities/echo.html>. Maintenant, ceci semble être portable sous Linux avec n'importe quel shell: for i in $(seq 97 122); do printf "\\`printf %o $i`\n"; done Cf http://www.opengroup.org/onlinepubs/009695399/utilities/printf.html http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap05.html Reste que seq n'est pas POSIX. Linux le fournit (via les coreutils), mais pas Mac OS X 10.4 (je l'ai juste parce que j'ai installé les coreutils). Ceci est, je pense, complètement POSIX: i=97 while [ $i -le 122 ] do printf "\\`printf %o $i`\n" i=$(($i+1)) done (on peut aussi l'écrire sur une seule ligne, en utilisant des ";"). Mais avec zsh, si on a activé l'option PRINT_EXIT_VALUE, on se retrouve avec un "zsh: exit 1" à la fin à cause du test qui échoue. Ça ne se produit pas avec la construction spéciale [[ ... ]]], mais cette construction n'est pas POSIX. Cependant, ceci semble OK: i=97; (while [ $i -le 122 ]; do printf "\\`printf %o $i`\n"; i=$(($i+1)); done) Mais ce n'est pas pour autant portable dans l'absolu, même avec des shells que l'on peut croire POSIX: avec zsh 4.2.5, le printf de zsh (donc celui utilisé par défaut) ne supporte pas la forme \ddd (le support POSIX n'est donc pas complet). Cela exclut donc un grand nombre de systèmes si le shell est zsh. -- Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/> Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)