사용 {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'}