什么是cat不从管道输入中获取文件名列表的设计原理?为什么设计师选择以下不起作用?
ls *.txt | cat
Run Code Online (Sandbox Code Playgroud)
而不是这样,他们选择我们需要将文件名作为参数传递给cat:
ls *.txt | xargs cat
Run Code Online (Sandbox Code Playgroud)
当你说ls *.txt | cat不起作用时,你应该说这不符合你的预期.事实上,它的工作方式与它的工作方式相同.
来自man:
cat - Concatenate FILE(s), or standard input, to standard output
Run Code Online (Sandbox Code Playgroud)
假设下一个输出:
$ ls *.txt
file1.txt
file2.txt
Run Code Online (Sandbox Code Playgroud)
......输入cat将是:
file1.txt
file2.txt
Run Code Online (Sandbox Code Playgroud)
......这正是标准输出cat中的输出
在某些shell中,它相当于:
cat <(ls *.txt)
Run Code Online (Sandbox Code Playgroud)
要么
ls *.txt > tmpfile; cat tmpfile
Run Code Online (Sandbox Code Playgroud)
所以,cat他们的设计师希望这样做真的很有效.
在另一方面,你期待的是,cat解释其输入为一组文件名的读取并串连他们的内容,但是当你管到cat,该输入可以作为一个孤独的文件.
| 归档时间: |
|
| 查看次数: |
7458 次 |
| 最近记录: |