为什么 echo \"$(hostname -I)\" 在最后一个数字后面显示一个空格?如何避免这种情况?

为什么 echo \"$(hostname -I)\" 在最后一个数字后面显示一个空格?如何避免这种情况?

echo \"$(hostname -I)\"输出"111.111.111 " 我怎样才能避免额外的空间并改为"111.111.111"

答案1

如果命令打印空格,它将包含在输出中。好吧,实际上,由于命令替换没有被引用,结果将被分词,并且两个字符串"111.111.111和将作为两个不同的参数"传递,然后打印用单个空格连接。它不会改变这里的输出,但在许多其他情况下这很重要。如果命令替换后没有任何内容,则空格将在分词过程中消失。echoechoecho

由于它可能会打印多个 IP 地址,因此很可能hostname -I会打印一个尾随空格,并且在每个 IP 地址后打印一个空格比跳过最后一个空格更简单。

要删除空格,您可以使用后缀删除扩展:

ip="$(hostname -I)"
ip="${ip% }"
printf '"%s"\n' "$ip"

或者利用对你有利的分词:

printf '"%s"\n' $(hostname -I)

后者会单独引用每个以空格分隔的 IP 地址,并每行打印一个。

相关内容