${paramètre/mod/ch}
Bash recherche dans la valeur de paramètre la plus longue sous-chaîne satisfaisant le modèle mod puis remplace cette sous-chaîne par la chaîne ch. Seule la première sous-chaîne trouvée est remplacée. La valeur de paramètre n’est pas modifiée. Caractères et expressions génériques peuvent être présents dans mod.
Ce mécanisme de remplacement comprend plusieurs aspects :
Remplacement de la première occurrence
$ v=totito
$ echo ${v/to/lo}
lotito
$
La valeur de la variable v (totito) contient deux occurrences du modèle to. Seule la première occurrence est remplacée par la chaîne lo.
$ set topo
$ echo $1
topo
$
$ echo ${1/o/i}
tipo
$
Remplacement de la plus longue sous-chaîne
$ v=abcfefg
$ v1=${v/b*f/toto} => utilisation du caractère générique *
$ echo $v1
atotog
$
Deux sous-chaînes de v satisfont le modèle b*f : bcf et bcfef
C’est la plus longue qui est remplacée par toto.
${paramètre//mod/ch}
Contrairement à la syntaxe précédente, toutes les occurrences (et non seulement la première) satisfaisant le modèle mod sont remplacées par la chaîne ch.
$ var=tobatoba
$ echo ${var//to/tou}
toubatouba
$
$ set topo
$ echo $1
topo
$
$ echo ${1//o/i}
tipi
$
${paramètre/mod/}, ${paramètre//mod/}
Suivant la syntaxe utilisée, lorsque la chaîne ch est absente, la première ou toutes les occurrences satisfaisant le modèle mod sont supprimées.
$ v=123azer45ty
$ shopt –s extglob
$ echo ${v//+([[:lower:]])/}
12345
$
L’expression générique +([[:lower:]] désigne la plus longue suite non vide de minuscules. La syntaxe utilisée signifie que toutes les occurrences doivent être traitées : la variable v contient deux occurrences (azer et ty). Le traitement à effectuer est la suppression.
Si on le souhaite, il est possible de préciser l’occurrence cherchée en début de chaîne de paramètre (syntaxe à utiliser : #mod) ou bien en fin de chaîne (%mod).
$ v=automauto
$ echo ${v/#aut/vel}
velomauto
$
$ v=automoto
$ echo ${v/%to/teur}
automoteur
$
Lorsque paramètre est le paramètre spécial @, les modifications s’appliquent à tous les paramètres de position ayant une valeur.
$ set alpha beta gamma
$
$ echo ${@//a/A}
AlphA betA gAmmA
$
$ echo ${@/%a/A}
alphA betA gammA
$