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)과 동일하지만 추가 포크가 없습니다.