使用sed从Bash变量中删除子字符串(后缀)

时间:2016-03-17 18:51:36

标签: bash sed

我对Bash脚本和管道的掌握很脆弱,并且遇到了我的基于经验的有限期望与现实冲突的情况。我想使用sed从Bash变量中删除子字符串(特别是后缀)。字符串和子字符串都是Bash变量。

> foo1=foo.cpp
> foo2=/main/bar/foo.cpp
> foo3=$(echo $foo2 | sed 's/$foo1//')
> echo $foo3
/main/bar/foo.cpp

如果我在sed表达式中使用硬编码字符串代替$ foo1,则表达式的行为符合要求:

> foo4=$(echo $foo2 | sed 's/foo\.cpp//')
> echo $foo4
/main/bar/

任何人都可以指出我缺少使foo3评估工作,以便删除“foo.cpp”吗?谢谢。

1 个答案:

答案 0 :(得分:3)

使用GNU bash 4及其Parameter Expansion

foo1="foo.cpp"
foo2="/main/bar/foo.cpp"
foo3="${foo2%$foo1}"
echo "$foo3"

输出:

/main/bar/