Назад | Перейти на главную страницу

Странная ошибка с регулярным выражением в grep

Я выполняю следующую команду:

cat something | egrep "(abc|def)$"

На сервере под управлением Linux.

Та же ОС с ядром 2.6.18 дает правильный ответ, а с 2.6.19 я получаю:

Illegal variable name. 

Очевидно, знак $ вызывает ошибку, но вопрос в том, почему он ведет себя по-разному в разных ядрах?

1) Используете ли вы одинаковый тип оболочки на обеих машинах?

2) Вы пробовали использовать одинарные кавычки, чтобы оболочка не пыталась интерпретировать знак доллара как переменную?

Скорее всего, это проблема с оболочкой, которую вы используете. Во-первых, цитаты; при использовании одинарных кавычек переменные в исходящей строке не заменяются. Т.е.,

% VAR="hello"
% echo "$VAR world!"
hello world!
% eco '$VAR world!'
$VAR world!

В вашем случае это буквально пытается выполнить $, но $ не является допустимым именем переменной. Если вы используете одинарные кавычки, оболочка не позволит заменить знак доллара.