Не может понять вывод 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
может произойти ноль или более раз в этой позиции).
Вы все равно должны всегда цитировать свое регулярное выражение, хотя!