Bash 쉘의 경로에서 마지막 "/"를 제거하는 방법은 무엇입니까?

Bash 쉘의 경로에서 마지막 "/"를 제거하는 방법은 무엇입니까?

내가 비슷한 경로를 가지고 있다고 가정 해 봅시다

path_1=/this/is/a/path/with/slash/

다음 정보를 얻으려면 어떻게 해야 합니까?

/this/is/a/path/with/slash

따라서 경로에는 마지막 "/"가 없습니다.

답변1

모든 POSIX 쉘에는 man bash"매개변수 확장: 일치하는 접미사 패턴 제거"가 있습니다(참고자료 참조). 그래서, 사용

$ echo "${path_1%/}"
/this/is/a/path/with/slash

변수의 값이 다음과 같은 경우아니요슬래시로 끝나면 값이 변경되지 않고 출력됩니다.

답변2

당신은 그것을 사용할 수 있습니다realpath

DIR=/tmp/foo///
echo "$(realpath -s "$DIR")"
# output: /tmp/foo

답변3

슬래시를 제거하는 또 다른 방법은 다음과 같습니다.

 $ echo "$(dirname -- "$path")/$(basename -- "$path")"

우리는 두 개의 일반적인 쉘 명령 dirnamebasename.

답변4

몇 가지 옵션이 있습니다. 나는 보통 경로를 정규화합니다. 경로를 정규화하면 기본 경로를 얻게 됩니다.

예를 들어 경로가 폴더에 대한 링크인 경우 표준 형식은 실제 경로를 가져옵니다. 또한 Unix와 Linux에서는 일반적이지 않지만 허용되는 모든 이중 슬래시를 제거합니다.

~/lf예 링크라고 가정합니다 ~/.hidden/food/limes/.

PATHNAME=~/lf//price/
CANONICAL_PATH="$( realpath --canonicalize-existing "${PATHNAME}" )"
echo "${CANONICAL_PATH}"

결과는 다음과 같습니다/home/kamil/.hidden/food/limes/price

이는 파일, 블록 장치 등에 적용되지만 물론 뒤에 슬래시가 없습니다. 예를 들어 내 시스템에서는 다음과 같습니다.

PATHNAME=/dev/disk/by-partlabel/Boot
CANONICAL_PATH="$( realpath --canonicalize-existing "${PATHNAME}" )"
echo "${CANONICAL_PATH}"

밝혀지다/dev/nvme0n1p2

경로가 있는지 확실하지 않은 경우 몇 가지 오류 검사를 추가해야 합니다.

PATHNAME=~/lf//price/
CANONICAL_PATH="$( realpath --canonicalize-existing "${PATHNAME}" 2>/dev/null )"
if [[ -z ${CANONICAL_PATH} ]]
then
    echo "Path doesn't exist: ${PATHNAME}" >&2
else
   echo "Canonical path is ${CANONICAL_PATH}"
fi

관련 정보