36

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

例如:

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

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

我不能只使用tr将空格转换回换行符,因为文件名中可能包含空格。

有没有办法保持换行符?

4

2 回答 2

46

引用变量以打印换行符:

filenames=$(grep 'foobar' /some/dir)
echo "$filenames"
于 2013-05-14T05:47:37.167 回答
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:
$
于 2013-05-14T05:53:54.550 回答