Bash本地文件描述符如何工作?

use*_*5 3 1 bash file-io file-descriptor

我看过但找不到任何描述以下文件描述符语法如何工作的详细信息的Bash指南:

while read line <&3; do
    echo $line
done 3<file.txt
Run Code Online (Sandbox Code Playgroud)

这是while循环的特殊构造,允许Bash查看done文件描述符源吗?是否有某种速记来进行执行召唤?

pax*_*blo 5

除了整个重定向事物是一个完全出色的概念之外,没有什么特别之处.

<&3简单地告诉read采取它从文件句柄3个输入和3<file.txt简单的设置文件句柄3相关的命令集,这是整个while循环.

您可以在下面的bash手册页中阅读REDIRECTION.

你也可以使用文件desriptor形式read -u 3,我更喜欢,因为它可以让我在这两个标准的输入,内环路额外的文件句柄.

并且,如果你想某种方式,文件句柄3在设置之前使用,那不是这样.将3<file.txt适用于整个while..done循环,认为它是这样的:

(
    while read line <&3; do
        echo $line
    done
) 3<file.txt
Run Code Online (Sandbox Code Playgroud)

从这个意义上讲,它与以下内容没有什么不同:

sed 's/^/xx:/' <file.txt
Run Code Online (Sandbox Code Playgroud)

因为重命令是命令完成的,而不是跟随它.