Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Derniers journaux de brouits :

Journal : expressions arithmétiques sur des caractères en shell

Posté par Ben (Jabber id, page perso, ) le 07 décembre 2005
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)

> Lire le journal (9 commentaires, moyenne: 1,7).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

linuxfr a bouffé les urls :(

Posté par Ben (Jabber id, page perso, ) le 07/12/2005 à 18:23. (lien). Évalué à 3.

paquet debian i386:
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)

utilité de chr ?

Posté par lcld () le 07/12/2005 à 20:12. (lien). Évalué à 1.

Sachant que echo et printf sont internes à bash, je me demande si un exécutable 'chr' est plus performant que la fonction suivante :
chr () { echo -e \\0`printf %o $1`; }

  • [^]Re: utilité de chr ?

    Posté par Matthieu C () le 07/12/2005 à 21:21. (lien). Évalué à 3.

    Il te dis qu'il utilise sh pas bash

  • [^]... et utilité de ord ?

    Posté par Ben (Jabber id, page perso, ) le 07/12/2005 à 21:47. (lien). Évalué à 2.

    printf n'est pas interne à bash, c'est un éxécutable, donc je pense que c'est du kifkif bourricot au niveau rapidité. à part cela, je pense que c'est plus cool d'utiliser ta version avec printf plutôt que mes executables vu que printf est dispo sur plein d'unices. cela évite d'installer chr et ord.
    du coup, voici une version de 'ord' avec des execuitables unix standards:
    ord () { echo -e $(echo -n $1 | od -A n -t dC -) ; }

    • [^]rapidité

      Posté par Ben (Jabber id, page perso, ) le 07/12/2005 à 22:13. (lien). É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

    • [^]Re: ... et utilité de ord ?

      Posté par lcld () le 07/12/2005 à 22:18. (lien). Évalué à 1.

      man bash -> rubrique 'COMMANDES INTERNES DU SHELL' : tu y trouveras printf

      (merci pour 'od', je ne connaissais pas)

      • [^]Re: ... et utilité de ord ?

        Posté par Matthieu C () le 07/12/2005 à 23:22. (lien). Évalué à 1.

        https://linuxfr.org/comments/657453.html#657453 ...

        • [^]Re: ... et utilité de ord ?

          Posté par lcld () le 08/12/2005 à 00:47. (lien). Évalué à 3.

          Merci, je sais lire et printf n'est pas exclusif à bash !

          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.

Revenir en haut de page