奇怪的Bash I / O重定向行为

时间:2013-01-30 05:48:51

标签: bash shell sh

我注意到Bash中有关重定向的奇怪行为,无法解释它。当我输入     

ls <>a
当前目录的文件打印到stdout(Bash shell),文件a被创建并保留为空。我希望错误,因为没有指定任何输入文件。 当我输入     
ls >< a
我收到错误(意外令牌'&lt;')。在我看来,如果第一件事发生,这应该尝试使用文件a作为ls的输入。这感觉不一致。 干     
ls <>
给我一个错误(意外的标记'换行')     
 ls ><
给了我一个不同的错误(意外的标记'&lt;')

有人可以解释这里发生了什么吗?

2 个答案:

答案 0 :(得分:2)

<>是有效的bash运算符,而不是连续的<>运算符。 ><不是有效的运算符,因此 会被解释为连续的><运算符。查看man page

  

重定向运算符

[n]<>word 
     

导致名称为的文件   扩展word以便在文件上读取和写入   如果未指定n,则为描述符0或文件描述符n。如果   文件不存在,它被创建。

答案 1 :(得分:1)

&GT;&LT;不是有效的Bash内置。 &LT;&GT;然而,是。

[fd] <> *word*

所有这一切都会导致打开名称为输入扩展名的文件,以便在该文件描述符上进行读取和写入。

如果您想了解更多信息以及其他重定向,http://www.gnu.org/software/bash/manual/bashref.html#Redirections是一个很好的来源。

哦,当你点击“输入”时,你在终端中创建了一个换行符,这就是shell认为的单词。