繁体   English   中英

Bash检查环境变量在环境变量数组中设置

[英]Bash check environment variables are set in an array of env vars

我有一个环境变量数组,并且想要检查每个环境变量以确保已设置它们。 我正在尝试使用数组b / c,我将要检查大约30个env变量。 如果我不使用for循环,而只使用if语句,则脚本可以工作。 不幸的是,我不希望有30个独立的if语句。

我会以错误的方式处理吗?

# my array to store env vars
env_vars=("A" "B" "C")

export A=10
export B=test
export C=

for each in ${env_vars[@]}; do 
    echo $each # this works fine
    if [ -z "$each" ]; then # this line doesn't seem to work
        echo $each;
        exit 1
    fi
done

bash为此有一个运算符: -v (我暂时忽略了环境变量和shell变量之间的区别。)

for each in "${env_vars[@]}"; do
    if ! [[ -v $each ]]; then
        echo "$each is not defined"
        exit 1
    fi
done

您的[ -z "$each" ]仅测试$each (即,存储在env_var中的变量的名称)是否为空,显然不是; 它只是被分配了一个名字! 你想看看在名为变量each定义,这是什么-v是。

在不支持-v ,可以使用以下构造:

for each in "${env_vars[@]}"; do
    if [ -z "${!each+x}" ]; then
        echo "$each is not defined"
        exit 1
    fi
done

然而,也有一些是重复一些可说的,当它使你的代码更清晰。 就像是

: ${A?A not set}
: ${B?B not set}
: ${C?C not set}

可以在任何POSIX Shell中使用,并且比需要bash扩展(如间接参数扩展或-v运算符)的循环更直接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM