에 따르면 man bash
:
${parameter#word} ${parameter##word} Remove matching prefix pattern. The word is expanded to produce a pattern just as in pathname expansion, and matched against the expanded value of parameter using the rules described under Pattern Matching below. If the pattern matches the beginning of the value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ``#'' case) or the longest matching pattern (the ``##'' case) deleted. If parameter is @ or *, the pattern removal operation is applied to each positional parameter in turn, and the expansion is the resultant list. If parameter is an array variable subscripted with @ or *, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.
${parameter#word}
왠지 와 사이에 다른 결과가 나오는 상황은 찾아볼 수 없습니다 ${parameter##word}
.
저는 두 문법 간의 서로 다른 동작을 보여주는 상황을 찾고 있습니다. 그건 그렇고, 뭔데요?가장 짧은 일치 패턴그리고 무엇입니까?가장 긴 일치 패턴?
답변1
이 예는 문제를 더 잘 설명할 수 있습니다.
$ parameter="This is a sentence with many words. Some of the words appear more than once. Oh, my word!"
$ echo "${parameter#*word}"
s. Some of the words appear more than once. Oh, my word!
$ echo "${parameter##*word}"
!
그래서:
${parameter#pattern}
삭제가장 짧은패턴 매칭${parameter##pattern}
삭제가장 긴패턴 매칭
어울리는 패턴 ${parameter%pattern}
도 있고${parameter%pattern}
끝끈. #비슷해 보였기 때문에 차이점을 기억합니다.앞으로 %(미국) 키보드에서.
답변2
방금 다음 예를 찾았습니다.
$ INT=00011
$ echo "${INT#*0}"
0011
$ echo "${INT##*0}"
11
여기서는 먼저 문자열 "00011"을 변수 "INT"에 할당한 다음 ${parameter#word}
"INT"를 매개변수로, "*0"을 단어 mode or로 사용하여 매개변수 확장 결과를 출력합니다.${parameter##word}
이것최소 [접두사] 일치'*0'의 매개변수는 '0'인 반면,최대 [접두사] 일치"000" 입니다.