!["${1/%\//}"가 확장되는 이유는 무엇인가요?](https://linux55.com/image/204700/%22%24%7B1%2F%25%5C%2F%2F%7D%22%EA%B0%80%20%ED%99%95%EC%9E%A5%EB%90%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94%3F.png)
if [[ "$1" != "" ]]; then
dr="${1/%\//}"
fi
위 코드에서 "${1/%\//}"
확장이란 무엇입니까?
답변1
/
이는 a 또는 쉘에서 a로 끝나는 값의 끝에서 a를 제거하는 우회 방법입니다 .$1
/
bash
ksh
zsh
비표준 매개변수 대체를 사용하여 일치가 끝나면 텍스트를 바꿉니다 ${parameter/%pattern/replacement}
. 여기에 사용된 패턴은 문자 그대로의 슬래시(그렇지 않으면 이스케이프해야 하며 구분 기호 역할을 함)가 아무것도 아닌 것으로 대체된다는 것입니다. 테스트를 통해 값이 null이 아닌 경우에만 교체 및 할당이 수행됩니다.$parameter
pattern
\/
if
dr
$1
동일한 콘텐츠를 작성하는 보다 이식 가능한 방법은 다음과 같습니다.
[ -n "$1" ] && dr=${1%/}
또는,
if [ -n "$1" ]; then
dr=${1%/}
fi
표준 대체는 값 끝에서 일치하는 항목 ${parameter%pattern}
(가장 짧은 하위 문자열) 을 제거합니다 . 위 코드에서는 슬래시인 경우 문자열의 마지막 문자를 제거하기 위해 패턴과 함께 사용하고 있습니다.pattern
$parameter
/
테스트도 덜 복잡한 -n
테스트로 변경되었습니다.진짜주어진 문자열이 비어 있지 않은 경우.