[Comm] Re[2]: [Comm] Re[2]: [Comm] Re[2]: [Comm] S: .rpm name normalizer (was: Кэш apt)

ASA =?iso-8859-1?q?llb_=CE=C1_udm=2Eru?=
Ср Май 28 21:50:09 MSD 2003


Hello Konstantin,

Wednesday, May 28, 2003, 10:12:58 PM, you wrote:

>> >> KV>         if [ ! -z $(cat /root/CD.1 /root/CD.2 | grep
>> >> $j) ]
>> >>
>> >>          if grep -qs $j /root/CD.[12]
>>
>> KV> Как вариант. Мне нравится if со скобками.
>>
>> Сработает быстрее. Для длинных файлов - на порядок.

KV> Т.е. если со скобками
KV> if [ grep -qs $j /root/CD.[12] ]
Это вообще не сработает. Я не писал скобок. man test
if grep -qs $j /root/CD.[12]

KV> быстрее чем
KV> if [ ! -z $(cat /root/CD.1 /root/CD.2 | grep $j) ]
KV> ?┼э

Да.  Потому  что  grep  -q немедленно вернет результат "истина",
которое  затем  сразу  проанализирует  if.  В  вашем  же  случае
вызывается команда [ (посмотрите '/bin/[') у которой аргументами
будет  все  остальное  до  знака ']'. Неэффективность в том, что
$(grep  ...  )  заставит  сформировать  длинную  строку со всеми
вхождениями  шаблона,  в  то время как для положительного ответа
достаточно   факта   первого   совпадения   (grep  -q).  А  если
результирующая   строка   будет   более   128Кбайт,   то   будет
переполнение буфера командной строки у [.

короче
man grep
man bash
man test

-- 
Best regards,
 ASA                            mailto:llb на udm.ru




Подробная информация о списке рассылки community