为什么不将文件名列表导入cat?

Mer*_*glu 9 unix pipe

什么是cat不从管道输入中获取文件名列表的设计原理?为什么设计师选择以下不起作用?

ls *.txt | cat
Run Code Online (Sandbox Code Playgroud)

而不是这样,他们选择我们需要将文件名作为参数传递给cat:

ls *.txt | xargs cat
Run Code Online (Sandbox Code Playgroud)

who*_*oan 8

当你说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,该输入可以作为一个孤独的文件.