Оболочка интерпретирует \$
и передавая ее через к ГРЭП, как $
, в конце строки. Итак, если ваша строка имеет конец, она будет соответствовать :-)
Если вы хотите соответствовать фактическому $
в grep, используйте одно из:
grep \\\$ grep '\$'
В первом случае оболочка интерпретируется \\
как \
и \$
как $
, давая \$
. В последнем случае это совсем не интерпретируется.
Что касается вашего вопроса относительно того, почему \$
знак доллара совпадает с двухсимвольной последовательностью, то регулярные выражения, подобные тем, которые используются в grep
некоторых случаях, используют специальные символы. Вот некоторые из них:
$ end of line ^ start of line . any character + 1 or more of the preceeding pattern * 0 or more of the preceeding pattern between n and m of the preceeding pattern [x-y] any character between x and y (such as [0-9] for a digit).
наряду со многими другими.
Если вы хотите сопоставить символ литерлы, который обычно рассматривается как специальный символ, вам нужно экранировать его, чтобы он воспринимался как grep
нормальный символ.