답변:
*
(별표 또는 별표)는이 명령을 주어지기 전에 (보통) 쉘에 의해 해석되는 특수 문자입니다. 점이있는 파일 이름을 제외한 모든 파일 이름으로 확장됩니다 (보통). 자세한 정보 는 패턴 일치에 대한 bash 매뉴얼 을 참조하십시오.
따옴표로 묶으면 별은 셸에서 해석되지 않으며 명령에 그대로 적용됩니다.
예는 설명했다. 인용 된 것 :
grep "string" . -r --include "*.pl"
여기 에 인수가 grep
있는 옵션이 제공됩니다 . 첫 번째 문자 가 문자 인 4 개의 문자열입니다 . 무엇 해당 문자열과 함께하는 일은 전적으로 최대입니다 . 이 경우 패턴과 일치하는 파일 만 고려합니다 .--include
*.pl
*
grep
grep
--include
*.pl
무대 뒤에서 AFAIK gnu grep은 gnu bash와 동일한 패턴 일치 lib를 사용합니다.
인용되지 않은 것 :
grep "string" . -r --include *.pl
여기서 쉘은 먼저로 *.pl
끝나는 모든 파일 이름으로 패턴 을 확장합니다 .pl
. 파일이있는 가정 foo.pl
, bar.pl
그리고 baz.pl
. 명령 행을 확장 한 후 다음과 같습니다.
grep "string" . -r --include foo.pl bar.pl baz.pl
여기에 grep
옵션 받게됩니다 --include
인수와 foo.pl
옵션 다음에 bar.pl
와 baz.pl
. --include foo.pl
패턴과 일치하는 파일 만 고려한다는 의미입니다 foo.pl
. 패턴에 와일드 카드가 없으므로 이름이 일치하는 파일과 일치하는 유일한 파일 foo.pl
입니다.
옵션 bar.pl
과 baz.pl
수단 grep도 해당 파일에서 검색하지만 패턴과 일치하지 않으므로 foo.pl
무시됩니다.
grep -r
일관성이없는 것 같았 는가를 알고 있었지만, 내가 *
.
차이점은 패턴 ( *.pl
)을 인용하지 않으면 셸에 의해 확장된다는 것입니다. 예를 들어, grep
이라는 파일이 포함 된 디렉토리 에서을 실행 하면 셸이 확장 foo.pl
되므로 실제로 보이는 것은 다음과 같습니다.*pl
grep
grep "string" . -r --include foo.pl
포함하도록 지시하기 때문에 foo.pl
하나의 파일 만 검색합니다.
패턴을 인용하면 쉘은 패턴을 확장 하지 않고grep
올바른 명령, 즉
grep "string" . -r --include *pl
peopl
에 의해 확장되지 않습니다 *.pl
.
grep
. 껍질 안에 있습니다.grep
따옴표를 보지 못합니다.