cat*_*ith 19 zsh io-redirection tee
我的环境:zsh,macOS
echo 'hi' | tee > a b cecho 'hi' > a b ca、b且c内容为 的文件hi。a命令 2 创建一个名为content 的文件hi b c。AFAIK,只有 Command 1 的用法没有 >记录在联机帮助页中tee:
echo 'hi' | tee a b c
Run Code Online (Sandbox Code Playgroud)
我需要一些帮助来理解为什么添加>上述代码(即命令 1)仍然会创建多个文件,而命令 2 只创建一个文件。
Ste*_*itt 50
重定向(>在本例中)\xe2\x80\x9c使用\xe2\x80\x9d以下参数作为重定向的目标;其他一切都不管。所以
echo 'hi' | tee > a b c\nRun Code Online (Sandbox Code Playgroud)\n相当于
\necho 'hi' | tee b c > a\nRun Code Online (Sandbox Code Playgroud)\ntee将其输入复制到b、c,并将标准输出复制到a。
echo 'hi' > a b c\nRun Code Online (Sandbox Code Playgroud)\n相当于
\necho 'hi' b c > a\nRun Code Online (Sandbox Code Playgroud)\n并输出hi b c到标准输出,该输出到a.
小智 17
这是基本的 shell 语法。重定向运算符>仅接受一个参数,该参数用作将标准输出重定向到的文件名。其余参数将传递给命令。
所以你的第一个命令:
echo 'hi' | tee > a b c
Run Code Online (Sandbox Code Playgroud)
运行命令echo 'hi' | tee b c,将其标准输出重定向到 file a。碰巧,tee将其标准输入复制到作为参数给出的所有文件以及其标准输出。因此,发出的数据echo 'hi'被复制到teefilesb和c,并复制到其标准输出(通过重定向为 file )a。
你的第二个命令:
echo 'hi' > a b c
Run Code Online (Sandbox Code Playgroud)
运行命令echo 'hi' b c,再次将其标准输出重定向到 file a。如果您想查看生成的文件a,您会发现它包含文本hi b c,而在第一种情况下,创建的三个文件都只包含文本hi。
bxm*_*bxm 12
tee获取标准输入流并将副本发送到指定文件以及标准输出。使用 ,> a您可以将标准输出流捕获到文件a,同时tee正常写入文件b和c。
> filename可以出现在其一侧的任何点|(只要间隔适当且不转义)。
为了说明这一点,这些都是同义词:
echo hi | > a tee b c
echo hi | tee > a b c
echo hi | tee b > a c
echo hi | tee b c > a
Run Code Online (Sandbox Code Playgroud)