Usando sed:
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
All'interno del comando sed, il ^
carattere corrisponde al testo che inizia con $prefix
e il finale $
corrisponde al testo che termina con $suffix
.
Adrian Frühwirth fa alcuni buoni punti nei commenti qui sotto, ma sed
a questo scopo può essere molto utile. Il fatto che i contenuti di $ prefix e $ suffix siano interpretati da sed può essere buono o cattivo- finché si presta attenzione, si dovrebbe andare bene. Il bello è che puoi fare qualcosa del genere:
$ prefix='^.*ll'
$ suffix='ld$'
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
che può essere quello che vuoi ed è sia più elaborato che più potente della sostituzione della variabile bash. Se ricordi che da un grande potere derivano grandi responsabilità (come dice Spiderman), dovresti stare bene.
Una rapida introduzione a sed è disponibile all'indirizzo http://evc-cit.info/cit052/sed_tutorial.html
Una nota riguardante la shell e il suo uso delle stringhe:
Per il particolare esempio fornito, funzionerebbe anche:
$ echo $string | sed -e s/^$prefix// -e s/$suffix$//
... ma solo perché:
- a echo non importa quante stringhe ci sono nella sua lista di argomenti, e
- Non ci sono spazi in $ prefisso e $ suffisso
In genere è buona norma citare una stringa nella riga di comando perché anche se contiene spazi verrà presentato al comando come singolo argomento. Citiamo $ prefisso e $ suffisso per lo stesso motivo: ogni comando di modifica su sed verrà passato come una stringa. Utilizziamo virgolette doppie perché consentono l'interpolazione variabile; se avessimo usato virgolette singole, il comando sed sarebbe diventato letterale $prefix
e $suffix
questo non è certamente quello che volevamo.
Notate anche il mio uso di virgolette singole durante l'impostazione delle variabili prefix
e suffix
. Certamente non vogliamo che nulla venga interpretato nelle stringhe, quindi le citiamo singolarmente in modo che non avvenga alcuna interpolazione. Ancora una volta, potrebbe non essere necessario in questo esempio, ma è un'abitudine molto buona per entrare.