需求描述:
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
1 lework1234 2021-03-02 13:35:50 +08:00 可以用 `eval echo \$$env_name` 来解决嵌套变量 |
2 taolu 2021-03-02 13:40:04 +08:00 `echo ${!env_name}` |
3 nihaorz OP @lework1234 @taolu 感谢回复,问题已解决,`echo ${!env_name}`很好用,谢谢 |