1

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

while read line <&3; do
    echo $line
done 3<file.txt

这是允许 Bash 处理done文件描述符源的 while 循环的特殊构造吗?它是进行 exec 调用的某种速记吗?

4

1 回答 1

5

除了整个重定向是一个非常出色的概念之外,没有什么特别之处。

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

您可以在bash手册页下阅读它REDIRECTION

您还可以使用我喜欢的文件描述符形式,read -u 3因为它允许我在循环中获取标准输入和额外文件句柄。

而且,如果您认为文件句柄 3 是在设置之前使用的,那么事实并非如此。3<file.txt适用于整个循环while..done,可以这样想:

(
    while read line <&3; do
        echo $line
    done
) 3<file.txt

从这个意义上说,它没有什么不同:

sed 's/^/xx:/' <file.txt

因为重定向是针对命令完成的,而不是跟随它。

于 2013-05-01T07:15:54.903 回答