cat没有从管道输入中获取文件名列表的设计原理是什么?为什么设计师选择以下不起作用?
ls *.txt | cat
而不是这样,他们选择我们需要将文件名作为参数传递给cat:
ls *.txt | xargs cat
当你说ls * .txt |猫不工作,你应该说这不会像你期望的那样工作.事实上,它的工作方式与它的工作方式相同.
来自男人:
cat - Concatenate FILE(s),or standard input,to standard output
假设下一个输出:
$ls *.txt file1.txt file2.txt
… cat的输入将是:
file1.txt file2.txt
在某些shell中,它相当于:
cat <(ls *.txt)
要么
ls *.txt > tmpfile; cat tmpfile
因此,猫正在按照他们的设计师所希望的那样工作.
另一方面,你期望的是cat将其输入解释为一组文件名来读取和连接它们的内容,但是当你输入cat时,那个输入就像一个孤独的文件.