![grep -F를 사용해도 달러 기호를 이스케이프 처리해야 하는 이유는 무엇입니까?](https://linux55.com/image/165190/grep%20-F%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%EB%8F%84%20%EB%8B%AC%EB%9F%AC%20%EA%B8%B0%ED%98%B8%EB%A5%BC%20%EC%9D%B4%EC%8A%A4%EC%BC%80%EC%9D%B4%ED%94%84%20%EC%B2%98%EB%A6%AC%ED%95%B4%EC%95%BC%20%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
# 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