Если у вас есть целый шаблон, который вы хотите сопоставить буквально , не рассматривайте его как регулярное выражение. Если вам doнужно сопоставить литерал $
в регулярном выражении, используйте \$
.
Нравится .
, \
и несколько других знаков препинания, $
— это метасимвол в регулярных выражениях. Символ $
соответствует пустой строке в конце строки (поэтому x$
соответствует x
, но только в конце строки. линия). Если ваш шаблон не содержит каких-либометасимволов, вам не нужно рассматривать его как регулярное выражение, и вы должны использовать grep -F
, как объясняет Кусалананда.
Есливам действительно нужно сопоставить $
или любой другой метасимвол буквально в регулярном выражении, экранируйте его метасимволом \
. Чтобы сопоставить литерал $
напишите \$
, чтобы сопоставить литерал \
напишите \\
и так далее.
param='ambari_parameter\$'
echo "ambari_parameter$" | grep "$param"
Когда вы присваиваете param
в оболочке, заключайте регулярное выражение в одинарные кавычки ( '
'
), как показано выше, потому что $
и \
также имеют особое значение в большинстве оболочек, включая все оболочки в стиле Борна (вы отметили bash).\
в оболочкахработает в основном так же, как и в регулярных выражениях. ( $
нет; он используется для различных расширений/замен оболочки, особенно расширения параметров).
Без кавычек или даже в двойных кавычках, \$
указывает литерал $
в оболочке, который затем передается в grep
как $
, который grep
интерпретирует как метасимвол регулярного выражения. Заключение его в одинарные кавычки предотвращает это. В качестве альтернативы вы можете написать \\\$
— или иногда просто \\$
— но это сбивает с толку.