管道输出bash功能

时间:2015-03-11 14:44:32

标签: bash shell pipe

我正在尝试将两个bash函数的输入/输出连接到 管。这是一个完整的程序,说明了我的问题:

function print_info {
    files=$(ls);
    echo $files;
}
touch "file.pattern"
print_info | grep "pattern"
rm -f file.pattern

但这只是输出所有文件的列表,而不是那些匹配的文件 “图案”。谁能帮我理解为什么?

2 个答案:

答案 0 :(得分:1)

这不起作用的原因是

echo $files;

变量$files受shell扩展(即,它扩展为echo的单个参数),生成的标记由空格分隔的echo打印。这意味着它的输出是一行,grep相应地处理它。

最少侵入性修复是使用

echo "$files";

答案 1 :(得分:0)

不要解析ls命令的输出。您可以使用find命令执行相同的操作,如:

find . -maxdepth 1 -type f -exec grep "pattern" {} \;

如果要从函数中获取文件名,请执行以下操作:

grep "pattern" $(print_info)