Bash 在单行命令中在另一个变量中扩展变量

Bash expand variable within another variable in a single line command

我正在尝试提取 CentOS 7.3 主机的 FQDN。这是我使用的脚本:

hostname=$(dig +short -x 10.10.10.10)
hostname=${hostname%.}

第二行的原因是 dig 输出 returns 末尾的一个点 . 例如abc@def.com.。因此第二行去除最后一个字符,即 .

有没有一种方法可以像单行命令一样在一行中执行此操作?类似于 hostname=${$(dig +short -x 10.142.114.44)%.}。基本上,我希望在另一个变量中扩展变量。我尝试使用 ${!..} 但无法使其工作并最终出现替换错误。我提到了 this and also this.

不能,参数扩展只能应用于参数,不能嵌套。

您可以通过管道输出在一条命令中完成:

hostname=$(dig +short -x 10.10.10.10 | sed -e 's/\.$//')

但它并不干净,只是更慢。