V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nihaorz
V2EX  ›  问与答

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

  •  
  •   nihaorz · 2021-03-02 09:58:52 +08:00 · 966 次点击
    这是一个创建于 1372 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求描述:

    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
    
    3 条回复    2021-03-03 09:34:04 +08:00
    lework1234
        1
    lework1234  
       2021-03-02 13:35:50 +08:00
    可以用 `eval echo \$$env_name` 来解决嵌套变量
    taolu
        2
    taolu  
       2021-03-02 13:40:04 +08:00
    `echo ${!env_name}`
    nihaorz
        3
    nihaorz  
    OP
       2021-03-03 09:34:04 +08:00
    @lework1234 @taolu 感谢回复,问题已解决,`echo ${!env_name}`很好用,谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6000 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:46 · PVG 10:46 · LAX 18:46 · JFK 21:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.