为什么“echo 123 > a.txt b.txt”只创建一个文件?

hao*_*hao 2 shell echo io-redirection

当我执行时echo 123 > a.txt b.txt,我希望看到123写入两个文件,a.txt并且b.txt. 但实际结果是只创建了一个文件。内容123 b.txt写入名为 的文件中a.txt。为什么会出现这种情况?

Joh*_*ica 5

要理解这一点需要两件事:

  1. 重定向运算符>仅适用于单个文件名。该文件名之后的任何内容都不是重定向的一部分;它是命令的附加参数echo
  2. 一个鲜为人知的事实是,重定向可以写在命令中的任何位置,并且具有相同的效果。

将这些事实放在一起,意味着这些命令都是等效的:

echo 123 b.txt >a.txt   # traditional order
echo 123 >a.txt b.txt   # your command
echo >a.txt 123 b.txt
>a.txt echo 123 b.txt
Run Code Online (Sandbox Code Playgroud)

它们都运行命令echo 123 b.txt,并将输出重定向到a.txt.

(我已将其压缩> a.txt为,>a.txt以便更容易查看>绑定的内容。)