grep -r을 사용하면 * 또는 로 검색할 수 있습니다. 동일한 내용을 반환하는 것처럼 보이지만 실제로 동일한가요?
"foo"를 검색한 다음 쓸 수 있다고 가정해 보겠습니다.
grep -r foo *
또는
grep -r foo .
누군가가 . 및 *를 설명하려고 합니까?
답변1
grep -r foo *
숨겨진 파일이나 디렉터리에서는 일치하는 항목을 찾지 않으며 *
셸에서 확장하지도 않으므로 다음과 같은 오류가 발생할 수 있습니다.매개변수 목록이 너무 깁니다.현재 디렉터리에 항목이 많을 때 오류가 발생하거나, 일부 파일이나 디렉터리의 이름이 대시 문자로 시작하면 다른 오류나 오작동이 발생합니다.
통화에는 grep -r foo .
위의 결함이 없습니다.
고쳐 쓰다:
또 다른 차이점: grep의 매뉴얼 페이지(@fedora17)는 다음과 같이 말합니다.
-r, --recursive
Read all files under each directory, recursively, following symbolic links only if they
are on the command line. ...
빈 디렉터리에서 이 명령을 실행하는 경우에도 차이점이 있습니다.
$ grep -r foo *; echo $?
grep: *: No such file or directory
2
$ grep -r foo .; echo $?
1
$
답변2
별표를 사용하면 이름이 점으로 시작하는 디렉터리의 파일을 일치시킬 수 없습니다 .cache
.
고쳐 쓰다:
이는 *
호출 전에 쉘에 의해 확장되어 grep
단일 디렉토리 이름(현재로서는)이 아닌 이름 목록을 수신하기 때문 입니다 .
. 셸이 모드를 확장하는 방식은 셸 매개변수(예: nullglob
또는 nocaseglob
기타 bash
옵션) 또는 환경 변수(예: LANG
또는 )를 사용하여 LC_ALL
사용자 정의 할 수 있습니다.