Не может понять вывод grep с регулярным выражением при использовании pipe

Насколько я знаю, при использовании регулярных выражений с grep следует использовать одинарные кавычки, в противном случае оболочка интерпретирует его как символы glob (подстановочные знаки) и выполняет расширение имени файла, но в приведенном ниже примере оболочка принимает его как регулярное выражение, даже если поиск Строка не в кавычках.

sh-4.3$ ls                                                                                                                                                                      
main.sh  test1  test2  test3.sh  test34  test3a                                                                                                                                 
sh-4.3$ ls | grep test3y*                                                                                                                                                       
test3.sh                                                                                                                                                                        
test34                                                                                                                                                                          
test3a                                                                                                                                                                          
sh-4.3$ 

Я не мог понять причину, почему это происходит.

1 ответ

Решение

Это работает, потому что ваше выражение test3y* не соответствует ни одному имени файла в каталоге, поэтому он не раскрывается ни во что и передается grep буквально делая регулярное выражение действительным (y* знак равно y может произойти ноль или более раз в этой позиции).

Вы все равно должны всегда цитировать свое регулярное выражение, хотя!

Другие вопросы по тегам