[bash] Bash 스크립트에서 현재 디렉토리 이름 (전체 경로없이) 가져 오기

bash 스크립트 또는 현재 터미널 명령으로 현재 작업 디렉토리 이름을 얻는 방법은 무엇입니까?

pwd현재 작업 디렉토리의 전체 경로를 제공 /opt/local/bin하지만 예를 들어bin



답변

기본 이름이 필요하지 않으며 특히 pwd를 실행하는 서브 쉘이 필요하지 않습니다 ( 추가적이고 값 비싼 포크 작업을 추가 함 ). 쉘은 매개 변수 확장을 사용하여 내부적 으로이 작업을 수행 할 수 있습니다 .

result=${PWD##*/}          # to assign to a variable

printf '%s\n' "${PWD##*/}" # to print to stdout
                           # ...more robust than echo for unusual names
                           #    (consider a directory named -e or -n)

printf '%q\n' "${PWD##*/}" # to print to stdout, quoted for use as shell input
                           # ...useful to make hidden characters readable.

다른 상황에서 (이 아닌 PWD디렉토리 이름을 가진 다른 변수) 에이 기술을 적용하는 경우 후행 슬래시를 잘라야 할 수도 있습니다. 아래는 bash의 extglob 지원 을 사용 하여 후행 슬래시가 여러 개인 경우에도 작동합니다.

dirname=/path/to/somewhere//
shopt -s extglob           # enable +(...) glob syntax
result=${dirname%%+(/)}    # trim however many trailing slashes exist
result=${result##*/}       # remove everything before the last / that still remains
printf '%s\n' "$result"

또는 extglob: 없이

dirname="/path/to/somewhere//"
result="${dirname%"${dirname##*[!/]}"}" # extglob-free multi-trailing-/ trim
result="${result##*/}"                  # remove everything before the last /


답변

basename프로그램을 사용하십시오 . 귀하의 경우 :

% basename "$PWD"
bin


답변

$ echo "${PWD##*/}"

​​​​​


답변

pwd와 basename의 조합을 사용할 수 있습니다. 예 :

#!/bin/bash

CURRENT=`pwd`
BASENAME=`basename "$CURRENT"`

echo "$BASENAME"

exit;


답변

grep은 어떻습니까 :

pwd | grep -o '[^/]*$'


답변

선택한 답변 (Charles Duffy)이 마음에 들지만 심볼릭 디렉토리에 있고 대상 디렉토리의 이름을 원할 경우주의하십시오. 불행히도 단일 매개 변수 확장 식으로 수행 할 수 있다고 생각하지 않습니다. 아마도 실수입니다. 이것은 작동해야합니다 :

target_PWD=$(readlink -f .)
echo ${target_PWD##*/}

이것을보기 위해 실험 :

cd foo
ln -s . bar
echo ${PWD##*/}

“바”보고서

DIRNAME

경로의 주요 디렉토리를 표시하려면 (/ usr / bin / dirname의 fork-exec가 발생하지 않음) :

echo ${target_PWD%/*}

예를 들어 foo / bar / baz-> foo / bar 변환


답변

echo "$PWD" | sed 's!.*/!!'

Bourne 쉘을 사용 중이거나 ${PWD##*/}사용할 수없는 경우