BASH:两条路径之间的路径差异?

时间:2014-09-08 13:28:28

标签: bash shell filepath

说我有路径

a/b/c/d/e/f
a/b/c/d

我如何获得以下内容?

e/f

1 个答案:

答案 0 :(得分:13)

您可以使用以下方法从另一个中删除一个字符串:

echo "${string1#"$string2"}"

请参阅:

$ string1="a/b/c/d/e/f"
$ string2="a/b/c/d"
$ echo "${string1#"$string2"}"
/e/f

来自man bash - > Shell parameter expansion

  

$ {参数#字}

     

$ {参数##字}

     

这个词被扩展为产生一个模式,就像文件名一样   扩张。如果模式与扩展值的开头匹配   参数,然后扩展的结果是扩展值   具有最短匹配模式的参数('#'情况)或   最长匹配模式('##'案例)已删除。


有空格:

$ string1="hello/i am here/foo/bar"
$ string2="hello/i am here/foo"
$ echo "${string1#"$string2"}"
/bar

要“清理”多个斜杠,您可以关注Roberto Reale's suggestion并使用readlink -m规范化路径,以便与具有相同实际路径的字符串进行比较:

$ string1="/a///b/c//d/e/f/"
$ readlink -m $string1
/a/b/c/d/e/f