引用名称包含点的bash变量

Tah*_*idi 12 bash

我有一个bash变量:agent1.ip192.168.100.137作为其值.当我参考它时echo:

echo $agent1.ip
Run Code Online (Sandbox Code Playgroud)

结果是:

.ip
Run Code Online (Sandbox Code Playgroud)

如何获取价值?

更新:我的变量是:

在此输入图像描述

Joh*_*nck 13

Bash本身并不了解带有点的变量名,但这并不意味着您不能在您的环境中拥有这样的变量.这是一个如何设置它并将其全部集合在一起的示例:

env 'agent1.ip=192.168.100.137' bash -c 'env | grep ^agent1\\.ip= | cut -d= -f2-'
Run Code Online (Sandbox Code Playgroud)

  • 然后您可以将该值分配给有效的 bash 变量名称。 (2认同)

nik*_*lay 9

最干净的解决方案是:

echo path.data | awk '{print ENVIRON[$1]}'
Run Code Online (Sandbox Code Playgroud)


che*_*ner 7

由于bash.ip不是有效的标识符bash,因此环境字符串bash.ip=192.168.100.37不用于在shell启动时创建shell变量.

我会使用awk标准工具从环境中提取值.

bash_ip=$(awk 'BEGIN {print ENVIRON["bash.ip"]}')
Run Code Online (Sandbox Code Playgroud)


she*_*ter 5

您的代码是否嵌套,并使用使用 ksh 的函数或脚本?

点分变量名是 ksh93 中的一项高级功能。一个简单的案例是

$ a=1
$ a.b=123
$ echo ${a.b}
123
$ echo $a
1
Run Code Online (Sandbox Code Playgroud)

如果您第一次尝试分配给a.b,您将得到

 -ksh: a.b=123: no parent
Run Code Online (Sandbox Code Playgroud)

IHTH