生成一条路径以向后返回给定路径

generate a path to go backward a given path

假设我有以下相对路径:

MY_PATH := first/second/third

我正在寻找一个最好的短 shell 命令来实现以下目的:

MY_NEW_PATH := ../../..

如何操作?

$ MY_PATH=first/second/third
$ sed -e 's#[^/]\+/\?#../#g' <<<"$MY_PATH"
../../../

获得没有尾部斜杠的路径的最简单方法就是将其删除。

$ MY_PATH=first/second/third
$ cdup=$(sed -e 's#[^/]\+/\?#../#g' <<<"$MY_PATH")
$ echo "$cdup"
../../../
$ echo "${cdup%/}"
../../..

你也可以使用类似这样的东西(它会生成一个更丑陋但仍然有效的路径):

$ MY_PATH=first/second/third
$ sed -e 's#[^/]\+/\?#./.#g' <<<"$MY_PATH"
./../../.

可能有更好的替代方法来获得无尾部斜线的路径,但我必须多考虑一下。