Intereting Posts
Увеличение ограничения размера для / var / cache / apt / archives passwd -S дает альтернативную схему аутентификации при использовании. и пароль в / etc / shadow не зашифрован Как включить httpd busybox на образе Alpine linux Почему SSH запрашивает мой пароль личного ключа каждый раз Список специальных символов в оболочке как отредактировать следующую строку после сопоставления шаблона и добавить строку, если она не существует Почему не работает dzen2 при вызове через? В чем причина того, что файл конфигурации требуется для удаления приложения, установленного через configure, make и make install? Как Netfilter понимает, что пакет связан? Значение исправления двоичных файлов? Ошибка mv command "уже существующий файл" Почему в некоторых системах Linux корневая файловая система отображается как / dev / root вместо / dev / <real device node> в mtab? Можно ли запустить дистрибутив Linux в VM на Qubes OS? Нет звука в наушниках USB с использованием fedora 16 Прерывание системных вызовов при попадании сигнала

Использование \ $ в конце имени переменной передается grep

Я прошел через один из сценариев оболочки и нашел строку:

ls $dir | grep -c "$NAME.${var}\$" 

Я понимаю, что $ будет расширять переменные NAME и var , но нужно ли положить \$ в конец?

grep использует строку "$NAME.${var}\$" как регулярное выражение. Предположительно, перед вашей тревожной строкой кода name переменных оболочки и var были присвоены значениям, поэтому интерпретатор скриптов интерпретировал значения скриптов для $NAME и ${var} . Поскольку окончательный «$» регулярного выражения экранируется с обратным слэшем, интерпретация вашего скрипта не пытается интерполировать значение переменной оболочки. «$» Передается grep как часть регулярного выражения. И действительно, «$» имеет особое значение для grep в контексте регулярного выражения. «$» означает «конец строки» для grep . Ничто, кроме семантики того, что вы хотите, требует окончательного «$».

Итак, вот выводы: предположим, что я создаю файлы в каталоге, например, имена: john, alex_john, alex_john1 и john1, и я выполняю следующие действия:

 [root@localhost ~]# ls | grep "john" john alex_john alex_john1 john1 [root@localhost ~]# ls | grep "john\$" <==here it would insert end of line john alex_john [root@localhost ~]# 

Итак, для второго grep будут напечатаны только файлы, заканчивающиеся на john.