[英]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.