我不小心在 Bash 中运行了以下脚本:
$ ls -l | > ../test.txt
我得到了一个空的 test.txt。
发生了什么?
您运行了一个空命令,即只有一个或多个重定向的简单命令。这执行重定向,但没有别的。
>file
是一种截断file为零字节的方法。空命令会忽略其标准输入,这就是您看不到ls输出的原因。我相信 POSIX 没有定义这个(事实上,zsh当你键入时读取 stdin >file)。有一个名为:(冒号)的显式空命令。如果您只需要它们的副作用,即重定向和变量赋值,则空命令很有用,如
: ${FOO:="default value"}  # Assign to FOO unless it has a value already.
    > ../test.txt尽管有输入数据,但会清空文件,这就是为什么你有 0 大小的文件。