Mémo Parameter Expansion

Dernière mise à jour : 03/03/2017

Parameter Expansion est un ensemble d’opérations intégré à Bash et ksh, il peut parfois avantageusement remplacer l’utilisation de cut/sed/awk (mais il ne remplace pas toutes les possibilités que ces commandes offrent) :

  • C’est intégré au shell donc plus rapide et ne nécessitant pas de commandes externes
  • Cela va éviter la création d’un sous-processus (subshell) déclenché par la commande cut/sed/awk que vous allez utiliser avec bien souvent un (ou plusieurs) pipe (an extra, and expensive, fork operation)
  • Personnellement je trouve ça plus simple et plus lisible que des lignes de commande avec cut/sed/awk

J’ai fait certains choix pour ce mémo :

  • J’ai privilégié des exemples nombreux et parlants afin de faciliter la comparaison entre chaque exemple et la compréhension. La première ligne de chaque exemple peut directement être collée dans un terminal, je vous encourage à le faire et ainsi à effectuer de nombreux tests. Je comptais tout expliquer mais je me suis finalement ravisé, on ne peut pas tout simplifier/expliquer, il vaut parfois mieux essayer de comprendre par soi-même
  • Ce mémo est tourné vers la pratique, je ne m’étends pas dans les explications de chaque cas, les règles précises du Parameter Expansion doivent être lues. Si vous avez des questions/remarques, merci d’utiliser les commentaires ou le formulaire de contact
  • J’ai laissé les noms des opérations en Anglais car la littérature sur le sujet est essentiellement en Anglais
  • Vous pouvez évidemment remplacer la commande echo par n’importe quelle autre commande (cp, rm, cd, chmod, mpv, etc.), j’ai choisi la commande echo pour illustrer le résultat

Les meilleures ressources sur le sujet :
https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
http://wiki.bash-hackers.org/syntax/pe
http://mywiki.wooledge.org/BashFAQ/073

String length

Afficher la longueur de la chaîne de caractères contenue dans la variable (#)

Search and replace

Remplacer la première occurence de firefox par chromium-browser (/firefox/chromium-browser)

Remplacer toutes les occurences de firefox par chromium-browser (//firefox/chromium-browser)

Substring removal

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à ; (#*;)

Supprimer la chaîne de caractères la plus longue possible en partant du début jusqu’à ; (##*;)

Supprimer la chaîne de caractères la plus courte possible en partant de la fin jusqu’à : (%:*)

Supprimer la chaîne de caractères la plus longue possible en partant de la fin jusqu’à ; (%%;*)

Supprimer la chaîne de caractères la plus courte possible en partant de la fin jusqu’à (espace) (% *)

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à (espace) (#* )

Supprimer la chaîne de caractères la plus longue possible en partant du début jusqu’à / (##*/)

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à // (#*//)

Supprimer la chaîne de caractères la plus courte possible en partant de la fin jusqu’à bash (%bash*)

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à manual (#*manual)

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à firefox (#*firefox)

Supprimer la chaîne de caractères la plus longue possible en partant du début jusqu’à firefox (##*firefox)

Supprimer la chaîne de caractères la plus courte possible en partant de la fin jusqu’à firefox (%firefox*)

Supprimer la chaîne de caractères la plus longue possible en partant de la fin jusqu’à firefox (%%firefox*)

Extract parts of a filename (substring removal)

Extraire uniquement le nom du fichier sans l’extension (%.*)

Extraire uniquement l’extension du fichier (##*.)

Extraire uniquement le chemin du fichier (%/*)

Extraire uniquement le nom du fichier (##*/)

Case modification

Convertir le premier caractère en majuscule (^)

Convertir tous les caractères en majuscule (^^)

Convertir le premier caractère en minuscule (,)

Convertir tous les caractères en minuscule (,,)

Inverser la casse du premier caractère (~)

Inverser la casse de tous les caractères (~~)

Substring expansion

Se positionner au 5ème caractère puis récupérer les caractères jusqu’à la fin (:5)

Se positionner au début puis récupérer 3 caractères (:0:3)

Se positionner au 2ème caractère puis récupérer 4 caractères (:2:4)

Récupérer 3 caractères en partant de la fin (: -3)

Se positionner au 6ème caractère puis récupérer les caractères jusqu’au 2ème caractère en partant de la fin (:6:-2)

Se positionner au 10ème caractère en partant de la fin puis récupérer 2 caractères (: -10:2)

Se positionner au 7ème caractère en partant de la fin puis récupérer les caractères jusqu’au 3ème caractère en partant de la fin (: -7:-3)

Se positionner au 9ème caractère en partant de la fin puis récupérer aucun caractère (: -9:0)

Enchaîner mais pas combiner

Il n’est pas possible de combiner les différentes opérations (substring removal, substring expansion, etc.) entre elles, on peut les enchaîner les unes après les autres.

Pour rappel utiliser ; sur une ligne de commandes revient à faire ceci dans un script (évidemment on mettra des commentaires et en forme le tout).

Aucun avis pertinent dans Mémo Parameter Expansion

Laisser un commentaire

indique des champs obligatoire.