我对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”吗?谢谢。
答案 0 :(得分:3)
使用GNU bash 4及其Parameter Expansion:
foo1="foo.cpp"
foo2="/main/bar/foo.cpp"
foo3="${foo2%$foo1}"
echo "$foo3"
输出:
/main/bar/