Экспорт имени последнего, кроме одного каталога

Как объяснено в этом вопросе, мы можем получить имя текущего рабочего каталога. Но как получить последнее, кроме одного имени каталога?

Сценарий:

# working directory /etc/usr/abc/xyz.txt 
printf '%s\n' "${PWD##*/}" #prints abc
#i want to print usr
printf '%s\n' "%{PWD##*/-1}" #prints me whole path

Подскажите как это сделать.

Заранее спасибо.

2 ответа

Решение

Классический способ будет:

echo $(basename $(dirname "$PWD"))

dirname удаляет последний компонент пути; basename возвращает последний компонент того, что осталось. Это имеет дополнительную ценность работы рядом с корневым каталогом, где редактирование переменных с ${PWD##…} и т. д. не обязательно работает.

Предполагая, что вы не просто хотите бежать basename "$(dirname "$PWD")" по какой-то причине, и вы действительно хотите использовать расширение для этого (обратите внимание на предостережения здесь), которое вы хотели бы использовать.

# Strip the current directory component off.
tmppwd=${PWD%/*}
# Strip all leading directory components off.
echo "${tmppwd##*/}"

Но уловка расширения массива, упомянутая в одном из связанных комментариев, является хитрой (хотя и хитрой из-за других свойств расширения, таких как глобализация и т. Д.).

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