Io-Redirection

為什麼echo 'hi' |tee > abc 創建多個文件,而 echo 'hi' > abc 沒有?

  • July 7, 2022

我的環境:zsh,macOS


關注的命令:

  1. echo 'hi' | tee > a b c
  2. echo 'hi' > a b c

命令 1 創建名為 a、b 和 c 且內容為“hi”的文件。命令 2 創建一個名為 a 的文件,內容為“hi b c”。

AFAIK,只有命令 1 的用法沒有 >記錄在手冊頁中tee

echo 'hi' | tee a b c

我需要一些幫助來理解為什麼添加>上述程式碼(即命令 1)仍然會創建多個文件,而命令 2 只創建一個文件。

重定向(>在這種情況下)“使用”以下參數作為重定向的目標;其他一切都不管了。所以

echo 'hi' | tee > a b c

相當於

echo 'hi' | tee b c > a

tee將其輸入複製到b,c和標準輸出到a.

echo 'hi' > a b c

相當於

echo 'hi' b c > a

並輸出hi b c到標準輸出,該輸出到a.

這是基本的 shell 語法。重定向運算符>只接受一個參數,它用作將標準輸出重定向到的文件名。其餘參數傳遞給命令。

所以你的第一個命令:

echo 'hi' | tee > a b c

執行命令echo 'hi' | tee b c,將其標準輸出重定向到 file a。碰巧,tee將其標準輸入複製到作為參數給出的所有文件以及其標準輸出。因此,由 發出的數據echo 'hi'被複製tee到 filesbc,並複製到其標準輸出,通過重定向是 file a

你的第二個命令:

echo 'hi' > a b c

執行命令echo 'hi' b c,再次將其標準輸出重定向到 file a。如果您想查看生成的文件a,您會發現它包含文本hi b c,而在第一種情況下,三個創建的文件都只包含文本hi

引用自:https://unix.stackexchange.com/questions/708958