url=http://www.foo.bar/file.ext; echo ${url##/*}
이 코드가 인쇄 될 것으로 예상 file.ext
했지만 전체 URL을 인쇄합니다. 왜? 파일 이름을 어떻게 추출합니까?
답변
단어는자를 문자열과 일치해야하기 때문입니다. 다음과 같아야합니다.
url="http://www.foo.bar/file.ext"; echo "${url##*/}"
고마워, 로버트, 당신은 올바른 방향으로 나를 조종했다.
답변
맨 페이지를 인용하려면 :
${parameter##word}
Remove matching prefix pattern. The word is expanded to produce
a pattern just as in pathname expansion. If the pattern matches
the beginning of the value of parameter, […]
/*
URL이 h
not로 시작하기 때문에 시작과 일치하지 않습니다 /
.
당신이 찾고있는 것을하는 사소한 방법은 (의견에 따라)입니다 echo "$url" | rev | cut -d / -f 1 | rev
. 그러나 물론 그것은 슬래시로 끝나는 URL에 흥미로운 결과를 줄 것입니다.
원하는 것을 수행하는 또 다른 방법은 패턴을 */
대신 사용하는 것입니다.
답변
basename
(1) URL 과도 작동하므로 간단하게 수행 할 수 있습니다.
url=http://www.foo.bar/file.ext; basename $url
답변
Bash Extended Globbing 도 참조하십시오. 이 경우 확장 글로브는 필수는 아닙니다.
shopt -s extglob; url=http://www.foo.bar/file.ext; echo ${url##+(*/)}
산출: file.ext