Экспорт имени последнего, кроме одного каталога
Как объяснено в этом вопросе, мы можем получить имя текущего рабочего каталога. Но как получить последнее, кроме одного имени каталога?
Сценарий:
# 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##*/}"
Но уловка расширения массива, упомянутая в одном из связанных комментариев, является хитрой (хотя и хитрой из-за других свойств расширения, таких как глобализация и т. Д.).