我有一组环境变量,想检查每个环境变量以确保它们已设置。我正在尝试使用数组 b/c 我将要检查大约 30 个环境变量。如果我不使用 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
中的变量 named 是否已定义,这就是 -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
运算符)的循环更直接。
关于linux - Bash 检查环境变量设置在环境变量数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50763087/