bash 函数的管道输出
Piping output of bash function
我正在尝试将两个 bash 函数的 inputs/outputs 与
管道。这是一个完整的程序来说明我的问题:
function print_info {
files=$(ls);
echo $files;
}
touch "file.pattern"
print_info | grep "pattern"
rm -f file.pattern
但这只是输出所有文件的列表,而不是匹配的文件
"pattern"。谁能帮我理解为什么?
不解析 ls 命令的输出。您可以使用 find 命令执行相同的操作,例如:
find . -maxdepth 1 -type f -exec grep "pattern" {} \;
如果你从一个函数中获取文件名,那么这样做:
grep "pattern" $(print_info)
这不起作用的原因是在
echo $files;
变量 $files
受到 shell 扩展(即扩展为 echo
的单独参数),结果标记由 echo
打印由空格分隔。这意味着它的输出是单行,grep
相应地处理它。
侵入性最小的修复方法是使用
echo "$files";
我正在尝试将两个 bash 函数的 inputs/outputs 与 管道。这是一个完整的程序来说明我的问题:
function print_info {
files=$(ls);
echo $files;
}
touch "file.pattern"
print_info | grep "pattern"
rm -f file.pattern
但这只是输出所有文件的列表,而不是匹配的文件 "pattern"。谁能帮我理解为什么?
不解析 ls 命令的输出。您可以使用 find 命令执行相同的操作,例如:
find . -maxdepth 1 -type f -exec grep "pattern" {} \;
如果你从一个函数中获取文件名,那么这样做:
grep "pattern" $(print_info)
这不起作用的原因是在
echo $files;
变量 $files
受到 shell 扩展(即扩展为 echo
的单独参数),结果标记由 echo
打印由空格分隔。这意味着它的输出是单行,grep
相应地处理它。
侵入性最小的修复方法是使用
echo "$files";