Генерировать путь, чтобы вернуться назад на заданный путь

Предполагая, что у меня есть следующий относительный путь:

MY_PATH := first/second/third

Я ищу предпочтительно короткую команду оболочки для достижения следующего:

MY_NEW_PATH := ../../..

Как это сделать?

1 ответ

Решение
$ 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"
./../../.

Возможно, есть лучшая альтернатива, чтобы получить путь без косой черты, но мне придется больше об этом думать.

Другие вопросы по тегам