Bash
為什麼沒有任何 shell 命令來創建文件?
請注意:
我不是在問如何從命令行創建文件!
多年來我一直在使用它
touch
來製作文件,卻沒有註意到它的主要目的是別的。如果想從命令行創建文件,有很多可能性:touch foo.bar > foo.bar cat > foo.bar echo -n > foo.bar printf '' > foo.bar
我敢肯定還有更多。
但事實是,上述命令實際上都不是為創建文件而設計的。例如,
man touch
建議此命令用於更改文件時間戳。為什麼像 Unix(或 Linux)這樣完整的作業系統沒有專門用於創建文件的命令?
我會說,因為幾乎沒有必要創建一個不會立即在命令行或 shell 腳本中填充內容的空文件。
首先創建文件,然後使用 I/O 重定向寫入文件絕對沒有任何好處,如果您可以一步完成的話。
在那些你真的想創建一個空文件並留下它的情況下,我認為這
> "${file}"
不能更簡潔和更優雅。TL;DR:它不存在,因為創建空文件通常沒有用,而且在它有的情況下,已經有無數的選項可以實現這個目標。
附帶說明,使用
touch
僅在文件不存在時才有效,而使用重定向的選項將始終截斷文件,即使它存在(因此從技術上講,這些解決方案並不相同)。> foo
是首選方法,因為它可以節省 afork
並且echo -n
通常應該避免,因為它非常不便攜。