2013-05-01 76 views
1

我已经看过,但无法找到它描述了以下文件描述语法的工作原理的细节的任何猛砸指南:Bash本地文件描述符如何工作?

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

这是一个特殊的施工while循环,使击到done为照顾文件描述符的来源?这是否是某种执行呼叫的简写形式?

+1

在完成之后寻找重定向没有什么特别之处。你需要认识到,整个'while ... done'结构是一个单一的shell命令(一个非常复杂的命令,其中可能包含许多其他命令),但它仍然只是一个命令...你可以把重定向在任何命令结束时,让它们适用于整个命令。 – 2013-05-01 07:32:40

回答

5

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

<&3只是告诉read把它从文件句柄3个输入和3<file.txt仅仅设置了文件句柄3相关的命令集,这是整个while循环。

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

您还可以使用的read -u 3文件desriptor形式,我更喜欢,因为它可以让我在标准输入和内环路额外的文件句柄。

而且,如果你以某种方式考虑,文件句柄3在设置之前使用,情况并非如此。该3<file.txt适用于整个while..done循环,认为它是这样的:

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

在这个意义上,它是没有不同:

sed 's/^/xx:/' <file.txt 
在重定向完成 命令

,不是下面它。

+0

在使用文件句柄之前,通常不需要设置文件句柄吗?我认为让我感到困惑的是文件描述符在指定文件之前被匿名使用。 我不熟悉如果有什么东西可以解析Bash while循环,允许使用。 – 2013-05-01 07:29:22

+0

@ user01189998819991197253,是的,它预先设置好了,它适用于整个'while..done'结构。这与'cat paxdiablo 2013-05-01 07:46:53

+0

谢谢,我现在明白了。我想我找不到合适的解释,因为我正在寻找一个文件描述符结构,当答案是一个真正的shell命令结构。 – 2013-05-01 08:09:36