在Bash中,管道char直接后跟重定向时会发生什么?

在Bash中,管道char直接后跟重定向时会发生什么?,bash,pipeline,Bash,Pipeline,我意外地在Bash中运行了以下脚本: $ ls -l | > ../test.txt 我得到了一个空的test.txt 发生了什么事?../test.txt将清空文件,而不管输入数据如何,这就是为什么您得到了0大小的文件。您运行了一个空命令,即一个简单的命令,只有一个或多个重定向。这将执行重定向,但不执行其他操作 >file 是将文件截断为零字节的一种方法。null命令忽略其stdin,这就是为什么您看不到ls输出的原因。 我相信POSIX没有定义它(事实上,zsh在您键入>文件

我意外地在Bash中运行了以下脚本:

$ ls -l | > ../test.txt
我得到了一个空的test.txt


发生了什么事?

../test.txt将清空文件,而不管输入数据如何,这就是为什么您得到了0大小的文件。

您运行了一个空命令,即一个简单的命令,只有一个或多个重定向。这将执行重定向,但不执行其他操作

>file
是将
文件
截断为零字节的一种方法。null命令忽略其stdin,这就是为什么您看不到
ls
输出的原因。 我相信POSIX没有定义它(事实上,
zsh
在您键入
>文件时读取stdin)。有一个显式的null命令,名为
(冒号)。如果您只需要Null命令的副作用,例如重定向和变量赋值,则Null命令非常有用,如中所示

: ${FOO:="default value"}  # Assign to FOO unless it has a value already.