Oui, c'est un remplacement de modèle dans l' expansion des paramètres du shell comme:
${parameter/pattern/replacement}
Mais si le premier caractère après le premier /est ou /ou #ou %il a la signification spéciale de all(répété),start et end.
avec:
$ str='one_#two_two_three_one'
Un single /remplacera la première instance. La première instance de one:
$ echo "${str/one/x-x}"
x-x_#two_two_three_one
Ou la première instance de two:
$ echo "${str/two/x-x}"
one_#x-x_two_three_one
L'instance de one à la fin:
$ echo "${str/%one/x-x}"
one_#two_two_three_x-x
Toutes les répétitions de two :
$ echo "${str//two/x-x}"
one_#x-x_x-x_three_one
L'instance de one au début:
$ echo "${str/#one/x-x}"
x-x_#two_two_three_one
Une chaîne commençant par #(citez le# ):
$ echo "${str/\#two/x-x}"
one_x-x_two_three_one
Mais si vous laissez le # (sans guillemets) seul, le remplacement est défini au début de la variable:
$ echo "${str/#/====}"
====one_#two_two_three_one
De plus, si le paramètre est un tableau, le remplacement se fait sur tous les éléments:
$ str=( one two three )
$ echo "${str[@]/#/==}"
==one ==two ==three
#et%font partie du modèle tandis qu'il//est différent de l'opérateur/et utilise les mêmes modèles. Vous pouvez avoirpattern='#x'; echo "${var/$pattern}"(ou${var//$pattern}), mais cepattern=/x; echo "${var/$pattern}"n'est pas la même chose queecho "${var//x}". Notez que#et%peut être combiné danszsh, mais pas dansbashniksh.