如果你看一下this documentation,你会看到在第19.0章末尾它说:
n<& - =关闭文件描述符n(默认情况下 - > 0 - > stdin)。
n>& - =关闭exit n的文件描述符。
我没有区分这两者.. 关闭文件描述符不应该对它是stdout的退出FD这一事实敏感。
如果你能澄清这一点,那将对我有所帮助。 需要很多帮助,而不是提前。
答案 0 :(得分:0)
这些之间的主要区别在于,如果未指定文件描述符编号,>&-
将关闭stdout,而<&-
将关闭stdin。在给定的用例中,文件描述符由数字指定,因此它们实际上在目前可用和广泛使用的shell中完全相同。
但是,如果给定的文件描述符未打开输入,则可以读取标准以要求n<&-
抛出错误,或者如果给定的文件描述符编号不是n>&-
则抛出错误打开输出:&#34;如果单词中的数字不表示打开(输入|输出)的文件描述符,将导致重定向错误&#34; 。因此,即使当前广泛使用的shell实际上没有实现这种强制执行,但在执行强制执行的情况下编写代码可能是明智的。
请参阅the relevant POSIX specification,重点如下:
2.7.5复制输入文件描述符
重定向运算符:
[n]<&word
应从另一个输入文件描述符复制,或者关闭一个。如果word评估为一个或多个数字,则由
n
表示的文件描述符或未指定n
的标准输入,应使其成为由word表示的文件描述符的副本; 如果单词中的数字不表示已经打开输入的文件描述符,则会产生重定向错误;见Consequences of Shell Errors。 如果单词评估为&#39; - &#39;,文件描述符n
,或标准输入,如果未指定n
,则应关闭。< / strong>尝试关闭未打开的文件描述符不应构成错误。如果word评估为其他内容,则行为未指定。2.7.6复制输出文件描述符
重定向运算符:
[n]>&word
应从另一个复制一个输出文件描述符,或者关闭一个。如果word评估为一个或多个数字,则由n表示的文件描述符或如果未指定n的标准输出,则应使其成为由word表示的文件描述符的副本; 如果单词中的数字不表示已经打开输出的文件描述符,则会产生重定向错误;见Consequences of Shell Errors。 如果单词评估为&#39; - &#39;,文件描述符
n
,或标准输出,如果未指定n
,则将关闭。尝试关闭未打开的文件描述符不应构成错误。如果word评估为其他内容,则行为未指定。