当我执行子shell 来获取命令的输出时,换行符会丢失。
例如:
filenames=$(grep 'foobar' /some/dir)
echo $filenames
假设有超过 1 个文件/some/dir
包含字符串“foobar”,这些文件名将打印在一个用空格分隔的长行中,而不是每行 1 个文件名。
我不能只使用tr
将空格转换回换行符,因为文件名中可能包含空格。
有没有办法保持换行符?
引用变量以打印换行符:
filenames=$(grep 'foobar' /some/dir)
echo "$filenames"
不是最友好的资源,因为管道......
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:
$