2016-09-29 13 views
0

Ich versuche, String-Substitution in bash zu tun, will es besser verstehen.Bash Variable in String-Substitution

ich in Handarbeit zu einem Erfolg Fall wie folgt aus:

a=abc_de_f 
var=$a 
echo ${var//_/-} 

outout ist abc-de-f. Das funktioniert.

jedoch das folgende Skript fehlschlägt:

a=abc_de_f 
echo ${$a//_/-} 

Die Fehlermeldung ${$a//_/-}: bad substitution ist. Es scheint in Bezug darauf, wie wir eine Variable in Substitution verwenden können. Warum scheitert das? Wie behandelt bash Variablen in diesem Fall?

Auch, was ist die beste Praxis, um Escape-Zeichen in bash String-Substitution zu behandeln?

Antwort

3

Im zweiten Fall brauchen Sie nicht die zweite $ als a ist die Zeichenfolge.

a=abc_de_f 
echo ${a//_/-} 

Wenn Sie ein Niveau von indirection hinzufügen wollten, können Sie ! vor der Variablen wie in

a=abc_de_f 
b=a 
echo ${b//_/-} 

ausgeben wird a, verwenden, während

echo ${!b//_/-} 

ausgeben wird abc-de-f.

Siehe here für eine Diskussion über die Kunst des Entkommens in BASH