我不小心在 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 大小的文件。