"grep '.*[s]' file"은 작동하지만 "grep .*[s] file"은 작동하지 않는 이유는 무엇입니까?

"grep '.*[s]' file"은 작동하지만 "grep .*[s] file"은 작동하지 않는 이유는 무엇입니까?

비교하다

grep '.*[s]' 파일

그리고

grep .*[s] 파일

이것이 작동하려면 왜 견적이 필요합니까? 두 번째 경우에는 grep이 마침표가 있는 모든 파일을 확인하려고 하는 것 같습니다.

답변1

매개변수 주위의 따옴표(단일 또는 이중)는 전역 확장을 억제합니다.

첫 번째 예는 정규 표현식을 에 인수로 전달합니다 grep. 두 번째 예에는 셸 자체로 확장된 glob 패턴이 포함되어 있으며 해당 패턴에 맞는 파일 이름을 인수로 전달합니다 grep.

답변2

또한 비교하십시오:

echo '.*[s]' file

그리고

echo .*[s] file

그러면 명령에서 확인한 인수가 출력됩니다.

첫 번째 예에서는 grep모드와 파일이라는 두 가지 매개변수를 명령에 전달했습니다.

두 번째 예에서는껍데기첫 번째 인수는 처리되어 점으로 시작하고 "s"로 끝나는 모든 파일로 대체됩니다. 따라서 grep 명령은 여러 인수를 사용하며 명시적으로 지정된 다른 모든 확장 파일 이름과 파일 중에서 첫 번째(확장) 파일 이름을 찾으려고 시도합니다.

관련 정보