[英]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.