bash 变量名中包含了 . (即dot,就是中文所说的“点儿”)

bash 变量名中包含了 . (即dot,就是中文所说的“点儿”)

在部署一个 java 应用的时候,为其配置了环境变量,如下所示,其中包含了 . 这个字符,这种变量是不有够正常访问的。

$ env |grep redis
redis.db=8
redis.sentinel.port=26379
redis.password=redis_pass
redis.sentinel.address1=172.16.25.1
redis.sentinel.address3=172.16.25.2
redis.sentinel.address2=172.16.25.3

访问时会报错

$ echo ${redis.password}
bash: ${redis.password}: bad substitution
$ echo ${redis\.password}
bash: ${redis\.password}: bad substitution

自己声明这样的变量也是不行的

[root@docker-182 minio]# a.b=123
bash: a.b=123: command not found...
[root@docker-182 minio]# export a.b=123
bash: export: `a.b=123': not a valid identifier

那么就有两个问题:

  1. 部署的应用是可以正常读取到这个变量的,shell 中如何获取变量值呢?
  2. 虽然是通过 pod 中配置变量传进来的,但是正常想自己声明这样一个变量,该如何声明呢?

获取名字带 . 的变量值

[root@docker-182 minio]# env |grep "a\.b"
a.b=3

python 方式获取,shell 不行, python 却没问题,同理其他编程语言也应该类似


In [1]: import os

In [2]: os.environ.get('a.b')
Out[2]: '3'

awk 获取

# echo "a.b" |awk '{print ENVIRON[$1]}'

声明名字带 . 的变量值

python 的声明方式直接使用 声明就行了,但是这种的,跟 export 是不一样的

In [4]: os.environ['redis.name'] = 'redis1'

In [5]: os.environ['redis.name']
Out[5]: 'redis1'

bash 声明,需要使用 env 命令,目前知道的只能在子shell中看到

[root@docker-182 tasks]# env |grep "redis\."
[root@docker-182 tasks]# env 'redis.name=redis2' bash
[root@docker-182 tasks]# env |grep "redis\."
redis.name=redis2

参考

  • https://stackoverflow.com/questions/26506539/reference-to-a-bash-variable-whose-name-contains-dot#:~:text=Bash%20itself%20doesn%27t%20understand%20variable%20names%20with%20dots,%27env%20%7C%20grep%20%5Eagent1%5C.ip%3D%20%7C%20cut%20-d%3D%20-f2-%27 : Reference to a bash variable whose name contains dot
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值