我注意到Bash中有关重定向的奇怪行为,无法解释它。当我输入
ls <>a当前目录的文件打印到stdout(Bash shell),文件
a
被创建并保留为空。我希望错误,因为没有指定任何输入文件。
当我输入
ls >< a我收到错误(意外令牌'&lt;')。在我看来,如果第一件事发生,这应该尝试使用文件
a
作为ls的输入。这感觉不一致。
干
ls <>给我一个错误(意外的标记'换行')
ls ><给了我一个不同的错误(意外的标记'&lt;')
有人可以解释这里发生了什么吗?
答案 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认为的单词。