LINUX.ORG.RU

Не работает переменная в GREP

 


0

1

Пробую использовать в grep переменную, но не получается, то ли синтаксис неправильный то ли вообще невозможно. Подскажите пожалуйста…

#вот так работает
grep -E ‘constanta(:|;)’ all_txt.txt > 1.txt

#а вот так нет
domains_var=‘constanta(:|;)’
grep -E $domains_var all_txt.txt > 1.txt

Какой шелл? Что даёт echo $BASH_VERSION ?

Кстати, если используется переменная, то лучше заключать её в двойные кавычки, что бы избежать интерпретации значения переменной после её подстановки, то есть писать не $your_variable , а "$your_variable"

Xenius ★★★★★ ()
Последнее исправление: Xenius (всего исправлений: 2)

Кавычки поставь вокруг имени переменной. Иначе получается такое: grep -E constanta(:|;) all_txt.txt > 1.txt — и скобки и пайп и даже точка с запятой интерпретируются шеллом. Надо: grep -E "$domains_var" all_txt.txt > 1.txt. И вообще заимей привычку всегда ставить кавычки вокруг переменных — хуже не будет.

CrX ()
Ответ на: комментарий от xaizek

Да, ты прав.

Но вообще на всякий случай лучше всегда брать в кавычки. Вдруг там пробелы окажутся (если переменная не прямо в скрипте задаётся, например, а из вывода какого-нибудь).

CrX ()