我已经查看但找不到任何描述以下文件描述符语法如何工作的详细信息的 Bash 指南:
while read line <&3; do
echo $line
done 3<file.txt
这是允许 Bash 处理done
文件描述符源的 while 循环的特殊构造吗?它是进行 exec 调用的某种速记吗?
我已经查看但找不到任何描述以下文件描述符语法如何工作的详细信息的 Bash 指南:
while read line <&3; do
echo $line
done 3<file.txt
这是允许 Bash 处理done
文件描述符源的 while 循环的特殊构造吗?它是进行 exec 调用的某种速记吗?
除了整个重定向是一个非常出色的概念之外,没有什么特别之处。
<&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
因为重定向是针对命令完成的,而不是跟随它。