Sae*_*ati 1 bash find cat here-document here-string
我有这个脚本:
while read $item;
do
# Some bash logic here
done <<< "$({ cat /path/to/some/file; echo; })"
Run Code Online (Sandbox Code Playgroud)
现在我还想用来find查找一些目录的名称,并将其与循环一起cat传递while。
换句话说,我想:
cat一份文件find一些目录while循环我被困在这一点上。
我想到了重复while逻辑,这不是一个好方法。我还考虑while使用函数重用循环内的逻辑。
然而,连接此处文档中的内容似乎是正确的方法。
实际上<<< "$({ cat /path/to/some/file; echo; })"是一个包含带引号的命令替换的此处字符串,而不是此处文档。正如Kamil Maciorowski已经指出的那样,您已经知道如何在命令替换中连接两个命令的结果,并且可以使用and执行相同的操作:cat /path/to/some/fileechocatfind
... <<< "$(cat /path/to/some/file; find . -name '*foo*')"
Run Code Online (Sandbox Code Playgroud)
我省略了内部,{ ... }因为命令已经按 分组$( ... )。
然而,恕我直言,使用进程替换来连接输出会更自然。要了解其工作原理,请从简单的输入重定向开始
while IFS= read -r item
do
# Some bash logic here
done < /path/to/some/file
Run Code Online (Sandbox Code Playgroud)
它通过 stdin 将文件的内容重定向到循环;然后
while IFS= read -r item
do
# Some bash logic here
done < <(cat /path/to/some/file)
Run Code Online (Sandbox Code Playgroud)
它将输出转换cat /path/to/some/file为伪文件,您可以以相同的方式重定向该伪文件。现在,将另一个标准输出生成命令添加到进程列表中是一件简单的事情:
while IFS= read -r item
do
# Some bash logic here
done < <(cat /path/to/some/file; find . -name '*foo*')
Run Code Online (Sandbox Code Playgroud)
参见示例
请注意,在所有情况下,语法read item都不是read $item.
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |