当我执行子shell以获取命令的输出时,换行符将丢失。
例如:
filenames=$(grep 'foobar' /some/dir)
echo $filenames
假设/some/dir
中有多个文件包含字符串“foobar”,那么这些文件名将以一行长的空格分隔行打印,而不是每行1个文件名。
我不能只使用tr
将空格转换回换行符,因为无论如何文件名都可以包含空格。
有没有办法维持换行符?
答案 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:
$