$ {0 ## * /} 및 $ {0 % / *}은 어떻게 작동합니까?


33

쉘 스크립트에서 찾은 다음 정규 표현식에 대해 상당히 혼란스러워합니다.

${0##*/}
${0%/*}

그들은 어떻게 작동합니까?

답변:


38

그것들은 정규 표현식이 아니며 Bash의 매개 변수 확장의 예입니다 : 변수 또는 특수 매개 변수를 값으로 대체하십시오. Wooledge Wiki는 좋은 설명이 있습니다.

기본적으로 예제에서는 다음 ${0##*/}과 같이 번역됩니다.

변수 $ 0 및 패턴 '/'의 경우 두 해시 는 매개 변수 의 시작부터 패턴까지의 가장 긴 (또는 욕심 많은) 일치를 삭제합니다.

따라서 $0파일 이름이 어디에 있습니까 ( 예 :) $HOME/documents/doc.txt이면 매개 변수가 다음과 같이 확장됩니다.doc.txt

마찬가지로 for ${0%/*}에 대해 패턴 /은 가장 짧거나 욕심이없는 일치 항목이 삭제 된 상태에서 매개 변수 ( %)과 일치합니다 $HOME/documents. 위의 예에서는

Bash Hacker 's Wiki 의 기사도 참조하십시오 .


2
그래서 ... 그들은 사용 basename하고 싶지 않았고 dirname? : D
Aaron D. Marasco

8
한 가지 장점은 매개 변수
susbstitution

@jasonwryan, 위의 두 예제에서 *의 기능을 자세히 설명해 주시겠습니까? 또는 왜 우리가 거기에 넣어야 하는가? 특히 첫 번째 예에서 *는 //; 두 번째 예에서 *는 / 뒤에 배치됩니다. 근본적인 차이점은 무엇입니까? 감사.
user785099

3
글로브 ( *)는 패턴을 포함한 모든 항목이 삭제됨을 나타냅니다. 따라서 매개 변수의 시작 인 경우 #왼쪽과 끝에 있으며 %, 오른쪽에서 다른 방법으로 작동합니다.
jasonwryan

5
bash 특정 적이 지 않으며 POSIX에 의해 지정 됩니다 sh.
nyuszika7h
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.