需求描述:
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}`很好用,谢谢
|