![Bash 스크립트에서 PROG=${0##*/}는 무엇을 의미합니까? [복사]](https://linux55.com/image/68551/Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20PROG%3D%24%7B0%23%23*%2F%7D%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9D%84%20%EC%9D%98%EB%AF%B8%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
PROG=${0##*/}
쉘 스크립트 이름을 구문 분석하는 것 같지만 작동 방식이 명확하지 않습니다. ${0}는 첫 번째 또는 0번째 변수인 것으로 알고 있습니다.
답변1
tarabyte가 의미하는 것처럼 이는 매개변수 확장을 처리해야 합니다.
$0은 이 스크립트가 실행되는 이름과 경로입니다. 예를 들어, /usr/bin/example.sh를 호출하는 경우 $0은 "/usr/bin/example.sh"입니다. 현재 작업 디렉터리가 /usr이고 ./bin/example.sh를 사용하여 동일한 스크립트를 호출하는 경우 $0은 "./bin/example.sh"가 됩니다.
"#"의 경우 이전에 지정한 접두사를 제거한 후 $0을 확장한다는 의미입니다. 이 경우 이전에 지정한 접두사는 */glob입니다. 단일 "#"은 탐욕스럽지 않으므로 첫 번째 */ glob과 일치한 후에 중지됩니다. 따라서 첫 번째 "/"와 그 앞의 모든 항목이 삭제됩니다. 두 개의 "#"은 모두 삭제 */를 의미합니다. 따라서 모든 "/"가 제거되고 그 이전의 모든 항목이 검색됩니다.
요약 수정: ${0##*/}은 $(basename $0)과 동일하지만 추가 포크가 없습니다.