Bash : Convertir une chaîne de caractères en majuscule / minuscule

  Comment passer une chaîne de caractères en majuscule ou minuscule en bash ?

À l’ancienne (avec dépendance sur « tr »)

La première méthode consiste à utiliser la commande « tr » pour effectuer la transformation. Ce qui donne pour la transformation de minuscule en majuscule :

fhh@mafalda ~ $ MyString="coMMent AlleZ voUs ?" ;
fhh@mafalda ~ $ echo "Tout en minuscule : \"$(echo $MyString | tr [A-Z] [a-z])\"" ;
Tout en minuscule : "comment allez vous ?"

ou, en utilisant les « classes de caractères » :

fhh@mafalda ~ $ echo "Tout en minuscule : \"$(echo $MyString | tr [:upper:] [:lower:])\"" ;
Tout en minuscule : "comment allez vous ?"

Vous l’aurez compris, la transformation inverse, pour le passage en majuscule, est quasi identique :

fhh@mafalda ~ $ echo "Tout en majuscule : \"$(echo $MyString | tr [:lower:] [:upper:])\"" ;
Tout en majuscule : "COMMENT ALLEZ VOUS ?"
fhh@mafalda ~ $ echo "Tout en majuscule : \"$(echo $MyString | tr [a-z] [A-Z])\"" ;
Tout en majuscule : "COMMENT ALLEZ VOUS ?"

Méthode moderne (pur bash)

La seconde méthode consiste à utiliser les fonctionnalités de bash. Le suffix « ^^ » dans le nom d’une variable permettra un passage en majuscule de son contenu tandis que « ,, » assurera la conversion inverse.

fhh@mafalda ~ $ MyString="coMMent AlleZ voUs ?" ;
fhh@mafalda ~ $ echo "En minuscule : \"${MyString,,}\"" ;
En minuscule : "comment allez vous ?"
fhh@mafalda ~ $ echo "En majuscule : \"${MyString^^}\"" ;
En majuscule : "COMMENT ALLEZ VOUS ?"

Références

man de bash : http://pwet.fr/man/linux/commandes/bash
man de tr : http://pwet.fr/man/linux/commandes/tr

4 réflexions au sujet de « Bash : Convertir une chaîne de caractères en majuscule / minuscule »

  1. Pur bash, mais moins obscure.
    Par contre, je ne sais pas à partir de quel version de bash c’est possible. (testé en 4.1.5)
    $ declare -u toto= »Un SimPle TesT »; echo $toto
    UN SIMPLE TEST
    $ declare -l toto= »Un SimPle TesT »; echo $toto
    un simple test

    1. Merci KooK, sur des BASH 3.X, aucune des méthodes « pur bash » ne fonctionnent… obligé de passer par « tr »…
      En même temps, le bash 3, ça date un peu… (À titre indicatif Fedora Core 3 : bash 3.00.14 ; RHEL 5.4, CentOS 5.5 : bash 3.2.25).

  2. Et il y a la forme ${VAR^^PATTERN} comme tu en parlais.

    $ toto= »abcdea »
    $ echo ${toto^^a}
    AbcdeA
    $ echo ${toto^^[ac]}
    AbCdeA

    1. Harf, y’a pas à dire, j’suis une truffe, j’ai regardé et testé ça toute à l’heure et je l’ai pas collé dans l’article…

      Merci d’avoir complété Clément

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *