“grep -r foo *”대“grep -r foo”


10

grep -r을 사용하면 * 또는로 모든 파일을 검색 할 수 있습니다. 그리고 같은 것을 반환하는 것 같지만 실제로 동일합니까?

"foo"를 검색하면 다음과 같이 쓸 수 있습니다.

grep -r foo *

또는

grep -r foo .

누구든지의 차이점을 설명하려고합니까? 그리고 *?

답변:


15

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
$

4

별표를 사용하면 이름이 점으로 시작하는 디렉토리의 파일 (예 :)을 일치시킬 수 없습니다 .cache.

최신 정보:

*이것은를 호출하기 전에 쉘에 의해 확장 되기 때문에 grep단일 디렉토리 이름 (현재의 경우 .) 대신 이름 목록을 수신하기 때문 입니다. 패턴을 확장하는 방식은 쉘 (관해서 쉘 파라미터로 정의 될 수도 nullglob, nocaseglob또는 다른 bash(같은 환경 변수를 선택) 또는 수 LANG또는 LC_ALL)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.