有没有办法在BASH中使用#和%一次删除前缀和后缀?

时间:2016-10-15 05:14:51

标签: bash

我学会了如何分别删除前缀和后缀,如下所示:

p="prefix-foo-bar-suffix"
echo ${p#prefix}    # -foo-bar-suffix
echo ${p%suffix}    # prefix-foo-bar-

我试图找出如何根据上面的例子将它们一起删除。我尝试了下面的代码,但它不起作用。

echo ${p#prefix%suffix}    # prefix-foo-bar-suffix, looks like it treats "prefix%suffix" as a whole thing
echo ${{p#prefix}%suffix}    # error, bad substitution

P.S。我知道使用正则表达式很容易让它工作,但在这里我想知道是否有可能构建一个仅基于#和%技巧构建的解决方案。另外,使用eval可能会很容易,但正如有些人所说,我倾向于避免使用它。

2 个答案:

答案 0 :(得分:2)

介绍辅助函数:

$ trim() { local x="${1#"$2"}"; echo "${x%"$3"}"; }
$ trim prefix-foo-bar-suffix prefix suffix
-foo-bar-
$ trim prefix-foo-bar-suffix prefix
-foo-bar-suffix
$ trim prefix-foo-bar-suffix "" suffix
prefix-foo-bar-

答案 1 :(得分:0)

谢谢你提出一个好问题。

联合使用前缀和后缀是不可能的,或者我在文档中找不到它。

但如果您知道后缀的长度和前缀,您可以使用这个简单的解决方案:

echo ${p:6: $[ ${#p}-12 ]}