`echo` 在这种情况下如何工作?:`externalip() { curl http://ipecho.net/plain; 回声; }`

3ch*_*eel 3 linux bash command-line echo

在搜索一个简单的 bash 函数来回显我的外部 IP 地址时,我遇到了这篇文章,其中包含以下示例:

function ext-ip () { curl http://ipecho.net/plain; echo; }
Run Code Online (Sandbox Code Playgroud)

我想知道echo在这种情况下是如何工作的;手册页curlecho联机帮助页都不是很有帮助。为什么它会回显上一个curl命令的响应体?与例如相比,以这种方式做有什么好处echo "$(curl -s http://ipecho.net/plain)"吗?我只是问,因为后者的语法似乎更透明/直截了当。

Jde*_*eBP 7

为什么它会回显上一个curl命令的响应体?

一个经典的加载问题

它不会做任何这样的事情。该curl命令输出一个没有尾随换行符的 IP 地址。该echo命令提供换行符。就这么简单。

无论

echo "$(curl -s http://ipecho.net/plain)"
Run Code Online (Sandbox Code Playgroud)

curl http://ipecho.net/plain ; echo
Run Code Online (Sandbox Code Playgroud)

在某种程度上是品味问题。然而,值得注意的是,这$()在 Bourne(不要与 Bourne Again)shell 和 C shell 中都不可用,而几乎所有 shell 都可以按顺序执行两个由分号分隔的普通命令。这甚至包括cshfish。☺