Как извлечь родительскую папку в скрипте bash? - PullRequest
0 голосов
/ 21 июня 2020

В сценарии bash я хочу извлечь 2 последние папки pwd.

Я сделал это:

value=`pwd`
echo "you are here : $value"
echo "the folder is: ${value##*/}"

Чтобы получить это:

you are here: /home/user/folder1/folder2
the folder is folder2

Теперь я хочу извлечь родительскую папку (folder1).

Ответы [ 3 ]

0 голосов
/ 21 июня 2020

Попробуйте это:

value=`pwd`
echo "you are here: $value"
echo "the folder is ${value##*/}"
parent="${value%/*}"
echo "the parent folder is ${parent##*/}"

, чтобы получить это:

you are here: /home/user/folder1/folder2
the folder is folder2
the parent folder is folder1
0 голосов
/ 21 июня 2020

Вот решение, использующее регулярные выражения: Если вы хотите знать, как работает регулярное выражение, я предлагаю вам взглянуть на этот сайт .

#!/bin/bash
value=$(pwd)
regex='.*\/([a-zA-Z0-9\._]*)\/([a-zA-Z0-9\._]*)$'
echo You are here: $value
echo The folder is: ${value##*/}
[[ $value =~ $regex ]]
echo Parent folder: ${BASH_REMATCH[1]}
0 голосов
/ 21 июня 2020

Вот так, используя предопределенную переменную PWD:

value="$PWD"
echo "you are here :$value"
echo "the folder is: ${value##*/}"
echo "the parent folder is $(basename "${PWD%/*}")"

Вы можете заменить последнюю строку на:

dir="${PWD%/*}"
echo "the parent folder is ${dir##*/}"

Обратная кавычка ( `) используется в подстановке команд в старом стиле, например,

foo=`command`

Вместо этого рекомендуется синтаксис foo=$(command). Обработка Backsla sh внутри $ () менее удивительна, а $ () легче вложить. См. http://mywiki.wooledge.org/BashFAQ/082

...