${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 $