我在擊具有可變的名稱爲:如何在Bash中操作變量名?
var=(any_word)_SuSE_11_design_guides
我要操作的名字,這樣我可以具有:
x=$(echo "$var" | some operation)
echo $x
SuSE_11_design_guides
基本上我想檢測何時移除後面第一_
每個字符。如何實現這一目標?
我在擊具有可變的名稱爲:如何在Bash中操作變量名?
var=(any_word)_SuSE_11_design_guides
我要操作的名字,這樣我可以具有:
x=$(echo "$var" | some operation)
echo $x
SuSE_11_design_guides
基本上我想檢測何時移除後面第一_
每個字符。如何實現這一目標?
我想你的意思是保留後面第一 _ 一切,可以使用參數擴展來實現。
string="(anyword)_SuSE_11_design_guides"
printf "%s\n" "${string#*_}"
SuSE_11_design_guides
目前還不清楚您是要打印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/'
$ 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
開始,留下的後綴。
我在原來的合併例如他們只是因爲我能。這無疑使得它更難閱讀,但我會爲衝擊值:-)
你說的話是沒有意義的,如果你是「刪除」第一背後的一切_然後'回聲$ x'會有任何的( any_word)而不是SuSE_11_design_guides。因爲如果你想這樣做,那麼你只需設置'x = SuSE_11_design_guides',就完成了。相反,你的意思是你試圖在(x)中得到(any_word)? –