У меня есть 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 при выполнении поиска шаблона?
Оболочка разворачивает Ваш *
до всех файлов соответствия в текущем каталоге, прежде чем grep
будет видеть его, таким образом, команда после расширения
grep test1 test2 test3.sh
grep
, интерпретирует первый аргумент test1
как шаблон для поиска и другие аргументы как названия файлов для заглядывания. Вывод от ls
передается как текст на grep
STDIN и не как имена файлов, и кажется, что это проигнорировано, так как он не имеет смысла в grep
синтаксис после того, как расширение было выполнено.
Всегда заключают Ваш regex
$ ls | grep 'test*'
test1
test2
test3.sh
в кавычки