我有一个 bash 变量:
agent1.ip
,其值为 192.168.100.137
。当我在 echo
中这样引用它时:
echo $agent1.ip
结果是:
.ip
如何获取该值?
更新:我的变量是:
Bash 本身不理解带点的变量名称,但这并不意味着您的环境中不能有这样的变量。 以下是如何设置并将其全部整合在一起的示例:
env 'agent1.ip=192.168.100.137' bash -c 'env | grep ^agent1\\.ip= | cut -d= -f2-'
由于
bash.ip
不是 bash
中的有效标识符,因此环境字符串 bash.ip=192.168.100.37
不用于在 shell 启动时创建 shell 变量。
我会使用标准工具
awk
从环境中提取价值。
bash_ip=$(awk 'BEGIN {print ENVIRON["bash.ip"]}')
最干净的解决方案是:
echo path.data | awk '{print ENVIRON[$1]}'
您的代码是否嵌套,并使用使用 ksh 的函数或脚本?
点分变量名是 ksh93 中的一项高级功能。一个简单的案例是
$ a=1
$ a.b=123
$ echo ${a.b}
123
$ echo $a
1
如果您第一次尝试分配给
a.b
,您将得到
-ksh: a.b=123: no parent
IHTH
试试这个:
export myval=`env | grep agent1.port | awk -F'=' '{print $2}'`;echo $myval
为了以可读的方式访问环境变量,我将为其创建一个 shell 函数:
getenv() {
awk 'BEGIN {print ENVIRON[ARGV[1]]}' "$1";
}
然后您可以将其用作
$ getenv agent1.ip
192.168.100.137
$ myvar=$(getenv agent1.ip)
$ echo "$myvar"
192.168.100.137
与已接受答案的差异是:
grep
和cut
适用于行)awk
),而不是 3 个 (env
、grep
、cut
)(还必须设置 I/O 缓冲区)还有一个问题是关于导出带点(.)的变量。
简短的回答:你不能,但你不需要,除了调用另一个可执行文件。在这种情况下,请使用
env
。