"${1/%\//}"가 확장되는 이유는 무엇인가요?

"${1/%\//}"가 확장되는 이유는 무엇인가요?
if [[ "$1" != "" ]]; then
    dr="${1/%\//}"
fi

위 코드에서 "${1/%\//}"확장이란 무엇입니까?

답변1

/이는 a 또는 쉘에서 a로 끝나는 값의 끝에서 a를 제거하는 우회 방법입니다 .$1/bashkshzsh

비표준 매개변수 대체를 사용하여 일치가 끝나면 텍스트를 바꿉니다 ${parameter/%pattern/replacement}. 여기에 사용된 패턴은 문자 그대로의 슬래시(그렇지 않으면 이스케이프해야 하며 구분 기호 역할을 함)가 아무것도 아닌 것으로 대체된다는 것입니다. 테스트를 통해 값이 null이 아닌 경우에만 교체 및 할당이 수행됩니다.$parameterpattern\/ifdr$1

동일한 콘텐츠를 작성하는 보다 이식 가능한 방법은 다음과 같습니다.

[ -n "$1" ] && dr=${1%/}

또는,

if [ -n "$1" ]; then
    dr=${1%/}
fi

표준 대체는 값 끝에서 일치하는 항목 ${parameter%pattern}(가장 짧은 하위 문자열) 을 제거합니다 . 위 코드에서는 슬래시인 경우 문자열의 마지막 문자를 제거하기 위해 패턴과 함께 사용하고 있습니다.pattern$parameter/

테스트도 덜 복잡한 -n테스트로 변경되었습니다.진짜주어진 문자열이 비어 있지 않은 경우.

관련 정보