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

У меня есть 3 файла: test1, test2, test3.sh. Файл test3.sh имеет названия файлов test1 и test2 как его содержание. Я не могу понять результат вывод ниже команды:

sh-4.3$ touch test1 test2                                                                                                                                                       
sh-4.3$ ls                                                                                                                                                                      
main.sh  test1 test2                                                                                                                                                                                                                                                                                                
sh-4.3$ cat > test3.sh                                                                                                                                                          
test1                                                                                                                                                                           
test2                                                                                                                                                                           
sh-4.3$ cat test3.sh                                                                                                                                                            
test1                                                                                                                                                                           
test2                                                                                                                                                                           
sh-4.3$ ls                                                                                                                                                                      
main.sh  test1  test2  test3.sh                                                                                                                                                 
sh-4.3$ ls | grep test*  

test3.sh:test1

вышеупомянутое grep команда дает совпавший текст в test3.sh файле, но что относительно вывода команды ls, поскольку это также содержит слово "тест". Оболочка игнорирует вывод команды ls при выполнении поиска шаблона?

1
задан 21 November 2016 в 11:53

1 ответ

Оболочка разворачивает Ваш * до всех файлов соответствия в текущем каталоге, прежде чем grep будет видеть его, таким образом, команда после расширения

grep test1 test2 test3.sh

grep, интерпретирует первый аргумент test1 как шаблон для поиска и другие аргументы как названия файлов для заглядывания. Вывод от ls передается как текст на grep STDIN и не как имена файлов, и кажется, что это проигнорировано, так как он не имеет смысла в grep синтаксис после того, как расширение было выполнено.

Всегда заключают Ваш regex

$ ls | grep 'test*'
test1
test2
test3.sh
в кавычки
1
ответ дан 7 December 2019 в 15:44

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

Похожие вопросы: