grep -F를 사용해도 달러 기호를 이스케이프 처리해야 하는 이유는 무엇입니까?

grep -F를 사용해도 달러 기호를 이스케이프 처리해야 하는 이유는 무엇입니까?
# minimal example file
printf "hey\$you\nhey\$me\n" > test
cat test
# hey$you
# hey$me

간단히 grep말해서:

grep -F "hey$you" test
# hey$you
# hey$me

즉, 첫 번째 행만 일치해야 할 때 두 행이 모두 일치합니다.

탈출하면 $예상대로 작동합니다.

grep -F "hey\$you" test
# hey$you

그러나 이것은 나의 이해에 어긋난다 -F/--fixed-strings

패턴을 고정된 문자열 집합으로 해석합니다(즉, grep동작을 강제로 fgrep).

man fgrep특별한 것도 없습니다 $.

macOS 및 Ubuntu에서 복사

답변1

이것껍데기$you"약한"(이중) 참조를 사용했기 때문에 (아마도 비어 있는) 변수로 확장됩니다 .

x셸의 옵션을 설정하여 이를 확인할 수 있습니다 .

$ grep -F "hey$you" test
+ grep --color=auto -F hey test
# hey$you
# hey$me

보시다시피 "hey$you"간단해집니다 hey. 두 행을 일치시킵니다.

대신 패턴 주위에 큰따옴표(작은따옴표)를 사용하세요.

$ grep -F 'hey$you' test
+ grep --color=auto -F 'hey$you' test
# hey$you

관련 정보