Вопрос по bash, shell, linux – Возьмите последнюю часть пути к папке в оболочке

20

Если вы наберете pwd, вы получите что-то вроде:

/home/username/Desctop/myfolder/

Как пройти последнюю часть?myfolder дорожка.

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

Спасибо

Я не думаю, что это правильно: выводpwd делаетnot содержать конечный/. Jens

Ваш Ответ

6   ответов
2

dirname а такжеbasename. dirname извлекает все, кроме последней части пути, иbasename извлекает только последнюю часть пути.

В этом случае, используяbasename буду делать что хочешь

basename $(pwd)

0

basename для этого при условии, что последняя часть действительно является компонентом каталога (а не файлом):

$ basename /home/username/Desctop/myfolder/
myfolder
17

Вы правы - это быстрая команда:

basename "$PWD"
Это по крайней мере одна бесполезная дорогая вилка. Как насчет использования$PWD?
0
function basename {
    shopt -s extglob
    __=${1%%+(/)}
    [[ -z $__ ]] && __=/ || __=${__##*/}
}

basename "$PWD"
echo "$__"
9

С помощьюbasename $(pwd) являютсяtwo useless and expensive forks.

echo ${PWD##*/}

следует полностью выполнить трюк в оболочке без дорогих форков (загвоздка: для корневого каталога это пустая строка).

Единственное, что последнее/ удаляется вbasename (Возможно, не pply с $ PWD, но в других пользовательских путях это может. Тем не менее, я бы выбрал этот метод поверх него. Другой${VAR%/} (до) не сложно. +1 за ответ, а также упоминание словаexpensive.
0

basename...

basename $(pwd);

Похожие вопросы