bash를 사용하여 URL에서 기본 파일 이름을 추출하십시오. echo ${url##/*} 이 코드가 인쇄 될

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이 hnot로 시작하기 때문에 시작과 일치하지 않습니다 /.

당신이 찾고있는 것을하는 사소한 방법은 (의견에 따라)입니다 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


답변