我注意到 Bash 中关于重定向的奇怪行为,无法解释。当我输入
ls <>一个当前目录的文件打印到标准输出(Bash shell),文件
a
被创建并留空。我预计会出现错误,因为没有指定输入文件。当我输入
ls >< 一个我收到一个错误(意外的令牌'<')。在我看来,如果发生第一件事,这应该尝试使用文件
a
作为 ls 的输入。这感觉不协调。正在做
ls <>给我一个错误(意外的令牌'换行')
ls ><给了我一个不同的错误(意外的令牌'<')
谁能解释这里发生了什么?
<>
是一个有效的 bash 运算符,而不是连续的<
and>
运算符。 ><
不是有效的运算符,因此它确实被解释为连续的>
和<
运算符。检查手册页:
重定向运算符
[n]<>word
导致名称为扩展名的文件在文件描述符或文件描述符(如果未指定)
word
上打开以进行读写。如果文件不存在,则创建它。n
0
n
>< 不是有效的 Bash 内置函数。<> 是,但是。
[fd] <> *word*
它所做的只是导致打开名称是输入扩展的文件,以便在该文件描述符上进行读取和写入。
如果您想了解更多关于它和其他重定向的信息,http://www.gnu.org/software/bash/manual/bashref.html#Redirections是一个很好的来源。
哦,当你点击“enter”时,你会在终端中创建一个换行符,这就是 shell 认为的单词。