这是 bash 参数替换吗?

这是 bash 参数替换吗?

在研究 bash 进程替换时,我发现了这一点:

counter=0

while IFS= read -rN1 _; do
    ((counter++))
done < <(find /etc -printf ' ')

echo "$counter files"

如果我理解正确的话,find 命令的输出会替换“_”。

然而:

  • 这是哪个机制?
  • 另外:做什么read -rN1

更新:

附加问题:进程替换指向 while 循环中的“完成”。这是如何工作的,即为什么 while 循环会在那个地方进行替换。有什么我可以读到的一般内容吗?

答案1

<(find /etc -printf ' ')称为“过程替代”。它将生成' '每个文件的字符(空格)。的输出find /etc -printf ' '在文件(或显示为文件的内容)中可用。该文件的名称在命令行上展开。这额外的 <从该文件执行 stdin 重定向。

read -rN1 _从(重定向的)stdin 读取一个名为 的变量_,一次读取一个字符,并对这些字符进行计数(每个字符代表一个文件)。

以下是read来自的论点man bash

-r     Backslash  does not act as an escape character.  The backslash is considered
       to be part of the line.  In particular, a backslash-newline pair may not  be
       used as a line continuation.

-N nchars
       read returns after reading exactly nchars characters rather than waiting for
       a  complete  line  of  input,  unless  EOF is encountered or read times out.
       Delimiter characters encountered in the input are not treated specially  and
       do not cause read to return until nchars characters are read.

相关内容