我正在尝试将两个bash函数的输入/输出连接到 管。这是一个完整的程序,说明了我的问题:
function print_info {
files=$(ls);
echo $files;
}
touch "file.pattern"
print_info | grep "pattern"
rm -f file.pattern
但这只是输出所有文件的列表,而不是那些匹配的文件 “图案”。谁能帮我理解为什么?
答案 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)