사용할 수 없거나 제거할 수 없는 환경을 처리해야 하는 경우 ack
이 명령은 C++ 프로젝트를 통해 문자열을 찾는 데 관련 파일만 제한하려고 시도합니다.
grep pattern --color -- /project/path/**/*.*([chCH]|cc|cxx|[ch]pp|py)
그러면 작업이 완료됩니다. 이제 더 많은 상품을 제공하기 위해 목표는 이를 쉘 스크립트에 넣는 것입니다. 이름이 이라고 가정합니다 wrapped_grep
. 내용은 다음과 같습니다 wrapped_grep
.
#!/usr/bin/env bash
shopt -s extglob # enable advanced pattern matching
grep $1 --color -- /project/path/**/*.*([chCH]|cc|cxx|[ch]pp|py)
그러나 실행하려고 하면 wrapped_grep pattern
동등한 직접 grep 쿼리가 예상대로 일치하는 항목을 찾더라도 출력이 제공되지 않습니다.
직접 grep 호출과 동일한 결과를 제공하기 위해 이 스크립트에서 누락된 것은 무엇입니까?
답변1
쉘 옵션은 표현식의 일부를 extglob
활성화 하지만 해당 부분에는 옵션이 필요합니다*([chCH]|cc|cxx|[ch]pp|py)
**/
globstar
globstar If set, the pattern ** used in a pathname expansion con‐ text will match all files and zero or more directories and subdirectories. If the pattern is followed by a /, only directories and subdirectories match.
그래서 당신은 필요할 수 있습니다
shopt -s extglob globstar