Символ повторения не работает для grep в csh при заключении в двойные кавычки

Ранее я задавал вопрос об этом, но теперь я понимаю проблему и поэтому хочу сделать репост. Символ * правильно интерпретируется в моем сценарии csh, если он не заключен в двойные кавычки, но когда я помещаю его в двойные кавычки, он интерпретируется неправильно. Кто-нибудь знает, как заставить csh правильно интерпретировать символ *. Ниже мой код:

#!/bin/csh
#set ans=`grep  -E hello\*i ~/wildcard/helloi.txt`
set ans=`grep  -E "hello\*i" ~/wildcard/helloi.txt`
echo $ans

Закомментированный набор работает нормально, а раскомментированный - нет. Входной файл содержит следующее:

helloiif
helli
helloi

Все 3 должны быть напечатаны.


person Programmer    schedule 29.11.2013    source источник


Ответы (1)


Вариант 1 (с кавычками, не экранировать *)

grep -E "hello*i" ~/wildcard/helloi.txt

Вариант 2 (без кавычек, должен экранировать *)

grep -E hello\*i ~/wildcard/helloi.txt

Внутри двойных кавычек csh всегда расширяет то, что знает, например *, $ и т. д.

person supergra    schedule 15.12.2013