Попробовал grep *.jpg в папке с одним файлом - действительно работает. А если больше одного, уже нет.
Не работает, т.к. при нескольких jpg файлах фактически исполняется команда
grep 1.jpg 2.jpg 3.jpg
В результате grep ищет
строку, содержащую "
1.jpg 2.jpg 3.jpg ".
В свою очередь ls то же не лыком шит. Он проверяет, куда направлен его вывод. И ведёт себя по разному.
- Если вывод направлен на терминал, то выводится несколько столбцов с раскраской.
- Если вывод направлен в канал ( " | " ), то имена файлов выводятся в один столбец.
"Канальный" вывод можно посмотреть так:
ls|cat
Получается, что grep имеет на входе такой текст:
1.jpg
2.jpg
3.jpg
Напомню, что grep отображает
строки, содержащие искомое выражение ( "
1.jpg 2.jpg 3.jpg " ). Тут таких строк нет.