2017-02-04 133 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开始,留下的后缀。

我在原来的合并例如他们只是因为我能。这无疑使得它更难阅读,但我会为冲击值:-)