【发布时间】:2021-03-17 14:36:00
【问题描述】:
我很惭愧提出这样一个基本问题,但我对管道的理解似乎存在重大缺陷。我读到了:
Do 'cat foo.txt | my_cmd' and 'my_cmd < foo.txt' accomplish the same thing?
还有很多其他帖子,但我无法理解为什么上面提到的语句不打印 foo.txt 的内容。本来我也试过
cat /etc/passwd | cut -d: -f1 | sort | echo
并最终将问题简化为列出的内容。有趣的是,如果我在最后省略管道并回显,一切都会正常运行——尽管我不想要换行符。我也可以
cut -d: -f1 < /etc/passwd | sort
并得到相同的结果(不幸的是换行符。)也许 echo 不接受标准输入?手册页没有提到它。它似乎是对其功能的一个相当有用的补充,但我想如果同时提供标准输入和参数,它可能会使事情变得更加复杂。
我知道我在这件事上疯了。不急于回答这个问题——我只是好奇。感谢您的宝贵时间!
【问题讨论】:
-
标准输入和命令参数通常不可互换。
echo打印它作为参数接收的内容,而不是作为标准输入接收的内容。我的回答here 可能会有所帮助。 (或者它可能只会进一步混淆事情,但希望不会。) -
谢谢戈登。我得到的主要收获是“xargs 可以被认为是将 STDIN 样式的输入转换为参数:”而 echo 实际上或多或少地相反。我已经设法完成了多少项目,甚至不了解我实际上在做什么,只是遵循以身作则的习语,这有点疯狂。