繁体   English   中英

bash功能的管道输出

[英]Piping output of bash function

我试图用管道连接两个bash函数的输入/输出。 这是一个完整的程序,它说明了我的问题:

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

但这只是输出所有文件的列表,而不是与“模式”匹配的文件。 谁能帮我理解原因?

这不起作用的原因是

echo $files;

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

侵入性最小的修复方法是使用

echo "$files";

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

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

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

grep "pattern" $(print_info)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM