2017-02-04 94 views
0

我在擊具有可變的名稱爲:如何在Bash中操作變量名?

var=(any_word)_SuSE_11_design_guides 

我要操作的名字,這樣我可以具有:

x=$(echo "$var" | some operation) 
echo $x 
SuSE_11_design_guides 

基本上我想檢測何時移除後面第一_每個字符。如何實現這一目標?

+0

你說的話是沒有意義的,如果你是「刪除」第一背後的一切_然後'回聲$ x'會有任何的( any_word)而不是SuSE_11_design_guides。因爲如果你想這樣做,那麼你只需設置'x = SuSE_11_design_guides',就完成了。相反,你的意思是你試圖在(x)中得到(any_word)? –

回答

1

我想你的意思是保留後面第一 _ 一切,可以使用參數擴展來實現。

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

目前還不清楚您是要打印SuSE_11_design_guides還是之前發生的任何事情。所以,我會回答兩個問題。

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

如果你想打印後沿部分:

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 

以上echo語句是由兩個嵌套bash的字符串函數。 打破這是什麼呢,它是等價的:

 
let a=${var%%SuSE_11_design_guides} 

上面一行條「SuSE_11_design_guides」斷$var尾返回前綴

 
${var##$a} 

上述帶狀無論是在$a(這恰好是前綴按前一步驟)中,從$var開始,留下的後綴。

我在原來的合併例如他們只是因爲我能。這無疑使得它更難閱讀,但我會爲衝擊值:-)