2017-02-04 5 views
0

Ich habe einen Variablennamen in heftigen Schlag als:Wie manipuliert man einen Variablennamen in Bash?

jedes Zeichen hinter dem ersten _
x=$(echo "$var" | some operation) 
echo $x 
SuSE_11_design_guides 

Grundsätzlich mag ich entfernen, wenn festgestellt:

var=(any_word)_SuSE_11_design_guides 

ich den Namen, so dass ich haben kann manipulieren möchten. Wie erreiche ich das?

+0

was du sagst macht keinen Sinn, wenn du alles hinterher "entfernst" _ dann hätte 'echo $ x' was auch immer (any_word) und NICHT SuSE_11_design_guides. Denn wenn Sie das wollten, dann würden Sie einfach 'x = SuSE_11_design_guides' setzen und fertig. Meinst du stattdessen, du versuchst, (any_word) in 'x' zu bekommen? –

Antwort

1

Ich denke, Sie wollten behalten Alles hinter ersten _, die mit Parameter-Erweiterung erreicht werden kann.

string="(anyword)_SuSE_11_design_guides" 
printf "%s\n" "${string#*_}" 
SuSE_11_design_guides 
1

Es ist unklar, ob SuSE_11_design_guides oder was auch immer vorher gedruckt werden soll. Also werde ich beides beantworten.

# Print the content before the first `_` 
echo $var | awk -F_ '{ print $1 }' 

Wenn Sie den hinteren Teil drucken:

echo $var | sed -E 's/.*(SuSE_11_design_guides).*/\1/' 
0
 
$ var=(any_word)_SuSE_11_design_guides 
$ echo ${var##${var%%SuSE_11_design_guides}} 
SuSE_11_design_guides 

Die obige echo-Anweisung aus zwei ineinander geschachtelten bash Strings Funktion besteht. Breaking down was dies tut, es ist das Äquivalent von:

 
let a=${var%%SuSE_11_design_guides} 

Die obigen Linienstreifen „SuSE_11_design_guides“ aus dem Schwanz $var das Präfix Rückkehr

 
${var##$a} 

Die oben genannten Streifen, was in $a ist (das ist das Präfix wie im vorherigen Schritt), von Anfang $var, das Suffix verlassen.

Ich kombinierte sie im ursprünglichen Beispiel, nur weil ich konnte. Es macht es definitiv schwieriger zu lesen, aber ich wollte einen Schockwert :-)

Verwandte Themen