"grep -r foo *" 대 "grep -r foo ".

"grep -r foo *" 대 "grep -r foo ".

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사용자 정의 할 수 있습니다.

관련 정보