사용 {html,php,htm}
단지로 동작 할 수 있습니다 중괄호 확장 비표준의 (POSIX 호환되지 않음) 기능입니다, bash
, ksh
,와 zsh
.
중괄호 확장이 인식 되려면 명령 줄에서 인용되지 않은 (a의 일부) 토큰 이어야합니다 .
중괄호 확장 로 확장 여러 인수를 손에 그래서 경우에, grep
보고 끝나는 여러 --include=...
사용자가 개별적으로 통과 한 것처럼, 옵션을.
중괄호 확장의 결과 는 함정이 있는 globbing (파일 이름 확장)의 대상이됩니다 .
각 결과 인수는 다음 과 같이 인용되지 않은 글 로빙 메타 문자 를 포함하는 경우 일치하는 파일 이름으로 확장 될 수 있습니다.*
. (예를 들어, 일치하는 것과 같은 이름 의 파일이 있어야 함)
과 같은 토큰에서는 그렇지 않을 수 있지만 일반적으로 명심할 가치가 있습니다.--include=*.html
--include=foo.html
는 IF nullglob
쉘 옵션이 켜져하는 일 (shopt -s nullglob
)와 일치의 globbing을하지 아무것도 , 인수가됩니다 폐기 .
따라서 완전히 강력한 솔루션 을 얻으려면 다음을 사용하십시오.
grep -R '--include=*.'{html,php,htm} pattern /some/path
'--include=*.'
로 취급됩니다 작은 따옴표 로 인해 리터럴 . 이것은 *
globbing 문자로의 부주의 한 해석을 방지 합니다.
{html,php,htm}
,-필요성- 인용되지 않은 중괄호 확장 [1]
은 3 개의 인수로 확장됩니다 {...}
.'...'
토큰 토큰 을 포함하기 때문입니다.
따라서 셸에서 따옴표를 제거한 후 다음 3 개의 리터럴 인수가 궁극적으로에 전달됩니다grep
.
--include=*.html
--include=*.php
--include=*.htm
[1]보다 정확하게 는 괄호 확장 의 구문 관련 부분 만 인용 해제해야합니다. 목록 요소 는 여전히 개별적으로 인용 될 수 있으며 중괄호 확장 후 원치 않는 글 로빙을 초래할 수있는 글 로빙 메타 문자를 포함하는 경우 여야합니다. 이 경우에는 필요하지 않지만 위의 내용은 다음과 같이 쓸 수 있습니다.
'--include=*.'{'html','php','htm'}