쉘 확장이 발생하지 않았습니다.

쉘 확장이 발생하지 않았습니다.

이 두 명령이 동일한 이유는 무엇입니까(또는 제가 얻은 결과에 따라 동일한 것으로 나타나는 경우)? 첫 번째 명령은 *glob 연산자로 처리되므로 작동하지 않을 것이라고 생각했지만 grep정상적으로 전달되고 정규식 패턴으로 해석됩니다.

git diff master | grep \\+.*TODO
git diff master | grep \\+.\*TODO

답변1

파일 이름 glob은 현재 디렉터리에 일치하는 파일이 있는 경우에만 확장됩니다. 그렇지 않으면( nullglob또는 failglob쉘 옵션을 제외하고) 그대로 전달됩니다. 그래서:

$ echo \\+.*TODO
\+.*TODO
$ printf '+foo\n+TODO\n+bar' | grep \\+.*TODO
+TODO

하지만

$ touch '\+.abcTODO'
$ echo \\+.*TODO
\+.abcTODO
$ printf '+foo\n+TODO\n+bar' | grep \\+.*TODO
$ printf '+foo\n+TODO\n+bar' | grep \\+.\*TODO
+TODO

관련 정보