dans mes shell scripts, il m'arrive parfois de vouloir effectuer des opérations arithmétiques sur des caractères (comparaisons..) mais comme je fais du pur sh, j'utilise expr. or expr ne fonctionne qu'avec des nombres. j'ai donc cherché un moyen de faire en shell ce que perl fait si facilement:
$ perl -e 'print chr(ord("x")+1);'
j'ai écrit 2 tout petits éxecutables : ord et chr, que je peux utiliser avec expr. l'expression en sh est:
$ echo $(chr $(expr $(ord x) + 1))
pour ceux qui en auraient besoin, les binaires sont ici :
paquet debian i386:
i386_deb
(dépend seulement de libc6)
le source est ici (lgpl):
tar_gz
(dépend donc de libc6-dev)
# linuxfr a bouffé les urls :(
Posté par Ben (site web personnel) . Évalué à 3.
http://brouits.free.fr/share/utils/chrord_0.1-1_i386.deb
(dépend seulement de libc6)
le source est ici (lgpl):
http://brouits.free.fr/share/utils/chrord_0.1.orig.tar.gz
(dépend donc de libc6-dev)
Tout homme qui dirige, qui fait quelque chose, a contre lui ceux qui voudraient faire la même chose, ceux qui font précisément le contraire, et surtout la grande armée des gens d'autant plus sévères qu'ils ne font rien du tout. -- Jules Claretie
[^] # Re: linuxfr a bouffé les urls :(
Posté par renaud . Évalué à 0.
En ruby (yeah !), ça donne ça : http://trac.cravate.org/Samples/browser/ex_ruby-linuxfr_2020(...)
# utilité de chr ?
Posté par lcld . Évalué à 1.
chr () { echo -e \\0`printf %o $1`; }
[^] # Re: utilité de chr ?
Posté par M . Évalué à 3.
[^] # ... et utilité de ord ?
Posté par Ben (site web personnel) . Évalué à 2.
du coup, voici une version de 'ord' avec des execuitables unix standards:
ord () { echo -e $(echo -n $1 | od -A n -t dC -) ; }
Tout homme qui dirige, qui fait quelque chose, a contre lui ceux qui voudraient faire la même chose, ceux qui font précisément le contraire, et surtout la grande armée des gens d'autant plus sévères qu'ils ne font rien du tout. -- Jules Claretie
[^] # rapidité
Posté par Ben (site web personnel) . Évalué à 1.
$ time ord x
real 0m0.002s
user 0m0.000s
sys 0m0.001s
$ time ord.sh x
real 0m0.029s
user 0m0.017s
sys 0m0.006s
bon, ça se passe de commentaire
$ time chr 120
real 0m0.002s
user 0m0.000s
sys 0m0.001s
$ time chr.sh 120
real 0m0.001s
user 0m0.001s
sys 0m0.000s
par contre, ici c'est comparable
Tout homme qui dirige, qui fait quelque chose, a contre lui ceux qui voudraient faire la même chose, ceux qui font précisément le contraire, et surtout la grande armée des gens d'autant plus sévères qu'ils ne font rien du tout. -- Jules Claretie
[^] # Re: ... et utilité de ord ?
Posté par lcld . Évalué à 1.
(merci pour 'od', je ne connaissais pas)
[^] # Re: ... et utilité de ord ?
Posté par M . Évalué à 1.
[^] # Re: ... et utilité de ord ?
Posté par lcld . Évalué à 3.
printf est à la fois interne à bash et disponible en tant que programme externe ( /usr/bin/printf )
Tout comme echo ( /bin/echo )
Donc pour sh, l'utilisation de printf est ok, et pour bash, on peut imaginer que c'est préférable à chr en terme de performance. Je ne suis donc pas du tout hors sujet.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.