如何在此处的文档中连接结果?

如何在此处的文档中连接结果?

我有这个脚本:

while read $item;
do
    # Some bash logic here
done <<< "$({ cat /path/to/some/file; echo; })"

现在我还想用来find查找一些目录的名称,并将其与循环一起cat传递while

换句话说,我想:

  • cat一份文件
  • find一些目录
  • 连接结果
  • 将它们作为此处文档送入while循环

我被困在这一点上。

我想到了重复while逻辑,这不是一个好方法。我还考虑while使用函数重用循环内的逻辑。

然而,连接此处文档中的内容似乎是正确的方法。

答案1

其实<<< "$({ cat /path/to/some/file; echo; })"是一个这里的字符串包含引用的命令替换而不是这里的文档。作为卡米尔·马乔罗夫斯基已经指出了,您已经知道如何在命令替换中连接两个命令的结果cat /path/to/some/fileecho并且可以使用catand执行相同的操作find

... <<< "$(cat /path/to/some/file; find . -name '*foo*')"

我省略了内部,{ ... }因为命令已经按 分组$( ... )

然而,恕我直言,使用它会更自然流程替代连接输出。要了解其工作原理,请从简单的输入重定向开始

while IFS= read -r item
do
    # Some bash logic here
done < /path/to/some/file

它通过 stdin 将文件的内容重定向到循环;然后

while IFS= read -r item
do
    # Some bash logic here
done < <(cat /path/to/some/file)

它将输出转换cat /path/to/some/file为伪文件,您可以以相同的方式重定向该伪文件。现在,将另一个标准输出生成命令添加到进程列表中是一件简单的事情:

while IFS= read -r item
do
    # Some bash logic here
done < <(cat /path/to/some/file; find . -name '*foo*')

参见示例

请注意,在所有情况下,语法read item都不是read $item.

相关内容