在寻找一个可以响应我的外部 IP 地址的简单 bash 函数时,我偶然发现了这个帖子,其示例如下:
function ext-ip () { curl http://ipecho.net/plain; echo; }
我想知道echo
在这种情况下如何工作;curl
和echo
手册页都没有什么帮助。为什么它会回显前一个curl
命令的响应主体?与例如相比,这样做有什么好处吗echo "$(curl -s http://ipecho.net/plain)"
?我问这个问题只是因为后者的语法似乎更透明/直接。
答案1
为什么它会回显前一个命令的响应主体
curl
?
经典引导性问题。
它不会做任何这样的事情。该curl
命令输出一个没有尾随换行符的 IP 地址。该echo
命令提供换行符。就这么简单。
无论
echo "$(curl -s http://ipecho.net/plain)"
比
curl http://ipecho.net/plain ; echo
在某种程度上,这只是个人喜好问题。但值得注意的是,$()
Bourne(不要与 Bourne Again 混淆)shell 和 C shell 中均不支持该功能,而几乎所有 shell 都可以按顺序执行两个由分号分隔的普通命令。甚至包括csh
和fish
。☺