shell 中以某一个变量作为 key 取其对应的环境变量值如何实现?

2021-03-02 09:58:52 +08:00
 nihaorz

需求描述:

APP_ENVS 变量由逗号分割的英文字符串组成,程序对 APP_ENVS 变量的值以逗号分割进行遍历

每次遍历的时候定义变量 env_name,需要判断以 env_name 命名的环境变量是否存在,存在则输出该环境变量的值,不存在则赋值 flag 为 1

遍历结束后判断 flag 为 1 则退出程序

我的写法如下,结果提示line 20: ${$env_name}: bad substitution,显然写成${$env_name}是不对的,但是我换成${env_name}也是不对啊,java 狗写 shell 真的是太难了,求大佬指点

#!/bin/bash

# 定义打印函数
println() {
    send=`date '+%Y-%m-%d %H:%M:%S'`
    echo "$send $1"
}

# 待检测的环境变量,以英文逗号间隔隔开
APP_ENVS="CAS_URL,APP_URL,USERSYSTEM_URL"

# 环境变量检测标识,检测不通过则赋值为 1
flag=0

env_names=(${APP_ENVS//,/ })
for env_name in ${env_names[@]}
do
    echo "env_name: $env_name"
    # TODO
    if [ -z "${$env_name}" ] ; then
        println "缺少环境变量: $env_name"
        flag=1
	else
        echo "$env_name value: ${$env_name}"
    fi
done

if [ $flag -eq 1 ] ; then
    println "程序退出"
    exit 1
fi
964 次点击
所在节点    问与答
3 条回复
lework1234
2021-03-02 13:35:50 +08:00
可以用 `eval echo \$$env_name` 来解决嵌套变量
taolu
2021-03-02 13:40:04 +08:00
`echo ${!env_name}`
nihaorz
2021-03-03 09:34:04 +08:00
@lework1234 @taolu 感谢回复,问题已解决,`echo ${!env_name}`很好用,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/757513

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX