쉘 스크립트에서 찾은 다음 정규 표현식에 대해 상당히 혼란스러워합니다.
${0##*/}
${0%/*}
그들은 어떻게 작동합니까?
쉘 스크립트에서 찾은 다음 정규 표현식에 대해 상당히 혼란스러워합니다.
${0##*/}
${0%/*}
그들은 어떻게 작동합니까?
답변:
그것들은 정규 표현식이 아니며 Bash의 매개 변수 확장의 예입니다 : 변수 또는 특수 매개 변수를 값으로 대체하십시오. Wooledge Wiki는 좋은 설명이 있습니다.
기본적으로 예제에서는 다음 ${0##*/}
과 같이 번역됩니다.
변수 $ 0 및 패턴 '/'의 경우 두 해시 는 매개 변수 의 시작부터 패턴까지의 가장 긴 (또는 욕심 많은) 일치를 삭제합니다.
따라서 $0
파일 이름이 어디에 있습니까 ( 예 :) $HOME/documents/doc.txt
이면 매개 변수가 다음과 같이 확장됩니다.doc.txt
마찬가지로 for ${0%/*}
에 대해 패턴 /
은 가장 짧거나 욕심이없는 일치 항목이 삭제 된 상태에서 매개 변수 끝 ( %
)과 일치합니다 $HOME/documents
. 위의 예에서는
Bash Hacker 's Wiki 의 기사도 참조하십시오 .
*
)는 패턴을 포함한 모든 항목이 삭제됨을 나타냅니다. 따라서 매개 변수의 시작 인 경우 #
왼쪽과 끝에 있으며 %
, 오른쪽에서 다른 방법으로 작동합니다.
sh
.
basename
하고 싶지 않았고dirname
? : D