Sì, è una sostituzione del modello nell'espansione dei parametri della shell come:
${parameter/pattern/replacement}
Ma se il primo personaggio dopo il primo / è o /o #o %ha il significato speciale di all(ripetuto), starte end.
con:
$ str='one_#two_two_three_one'
Un singolo /sostituirà la prima istanza. La prima istanza di one:
$ echo "${str/one/x-x}"
x-x_#two_two_three_one
O la prima istanza di two:
$ echo "${str/two/x-x}"
one_#x-x_two_three_one
L'istanza di one alla fine:
$ echo "${str/%one/x-x}"
one_#two_two_three_x-x
Tutte le ripetizioni di two :
$ echo "${str//two/x-x}"
one_#x-x_x-x_three_one
L'istanza di one all'inizio:
$ echo "${str/#one/x-x}"
x-x_#two_two_three_one
Una stringa che inizia con # (cita il #):
$ echo "${str/\#two/x-x}"
one_x-x_two_three_one
Ma se si lascia solo # (non quotato), la sostituzione viene impostata all'inizio della variabile:
$ echo "${str/#/====}"
====one_#two_two_three_one
Inoltre, se il parametro è un array, la sostituzione viene eseguita su tutti gli elementi:
$ str=( one two three )
$ echo "${str[@]/#/==}"
==one ==two ==three
#e%fanno parte del modello mentre//è un operatore diverso/e usa gli stessi schemi. Puoi averepattern='#x'; echo "${var/$pattern}"(o${var//$pattern}), mapattern=/x; echo "${var/$pattern}"non è lo stesso diecho "${var//x}". Si noti che#e%possono essere combinati inzsh, ma non inbashentrambiksh.