保持子shell输出的换行符

时间:2013-05-14 05:40:26

标签: linux bash

当我执行子shell以获取命令的输出时,换行符将丢失。

例如:

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

假设/some/dir中有多个文件包含字符串“foobar”,那么这些文件名将以一行长的空格分隔行打印,而不是每行1个文件名。

我不能只使用tr将空格转换回换行符,因为无论如何文件名都可以包含空格。

有没有办法维持换行符?

2 个答案:

答案 0 :(得分:29)

引用变量以打印换行符:

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

答案 1 :(得分:0)

由于管道不是最友好的资源......

 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:
$