Подтвердить что ты не робот

Поддерживать разрывы строк в выводе из подоболочки

Когда я выполняю подоболочку для получения вывода команды, разрывы строк теряются.

Например:

filenames=$(grep 'foobar' /some/dir)
echo $filenames

Предполагая, что в /some/dir содержится более 1 файла, который содержит строку "foobar", эти имена файлов будут напечатаны в одной длинной разделительной строке вместо 1 имени файла в строке.

Я не могу просто использовать tr для преобразования пробелов в разрывы строк, так как имена файлов могут иметь пробелы в них.

Есть ли способ поддерживать разрывы строк?

4b9b3361

Ответ 1

Введите переменную для печати строк новой строки:

filenames=$(grep 'foobar' /some/dir)
echo "$filenames"

Ответ 2

не самые дружественные ресурсы, из-за труб...

 grep 'foobar' /some/dir/| | awk '{print $1}' | sort -u

Вот пример вывода:

$ grep enc pwman/ui/* | awk '{print $1}'
pwman/ui/cli.py:
pwman/ui/cli.py:
pwman/ui/cli.py:
pwman/ui/cli.py:
pwman/ui/cli.py:
pwman/ui/cli.py:
Binary
$ grep enc pwman/ui/* | awk '{print $1}' | sort -u
Binary
pwman/ui/cli.py:
$