Io-Redirection為什麼
為什麼echo 'hi' |tee > abc
創建多個文件,而 echo 'hi' > abc
沒有?
我的環境:zsh,macOS
關注的命令:
echo 'hi' | tee > a b c
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
,將其標準輸出重定向到 filea
。碰巧,tee
將其標準輸入複製到作為參數給出的所有文件以及其標準輸出。因此,由 發出的數據echo 'hi'
被複製tee
到 filesb
和c
,並複製到其標準輸出,通過重定向是 filea
。你的第二個命令:
echo 'hi' > a b c
執行命令
echo 'hi' b c
,再次將其標準輸出重定向到 filea
。如果您想查看生成的文件a
,您會發現它包含文本hi b c
,而在第一種情況下,三個創建的文件都只包含文本hi
。