Bash를 사용하여 URL에서 기본 파일 이름 추출

Bash를 사용하여 URL에서 기본 파일 이름 추출
url=http://www.foo.bar/file.ext; echo ${url##/*}

이 코드는 을 인쇄할 것으로 예상했는데 file.ext전체 URL이 인쇄되었습니다. 왜? 파일 이름을 추출하는 방법은 무엇입니까?

답변1

단어가 잘릴 문자열과 일치해야 하기 때문입니다. 다음과 같아야 합니다:

$ url="http://www.foo.bar/file.ext"; echo "${url##*/}"
file.ext

DeRobert에게 감사드립니다. 당신은 저를 올바른 방향으로 이끌었습니다. 또한 @frank-zdarsky가 언급했듯이 basenameGNU coreutils에 있으며 대부분의 플랫폼에서도 사용할 수 있습니다.

$ basename "http://www.foo.bar/file.ext"
file.ext

답변2

맨페이지 인용:

${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에 대한 흥미로운 결과가 있습니다.

원하는 것을 수행하는 또 다른 방법은 패턴을 사용하는 것입니다 */.

답변3

basename(1)은 URL에도 적용되므로 간단하게 다음을 수행할 수 있습니다.

url=http://www.foo.bar/file.ext; basename $url

답변4

또한보십시오:Bash 확장 와일드카드, 이 경우에는 확장된 glob이 필요하지 않습니다.

 shopt -s extglob; url=http://www.foo.bar/file.ext; echo ${url##+(*/)}

산출:file.ext

관련 정보