gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:38 24 4
gpt4 key购买 nike

我有一组环境变量,想检查每个环境变量以确保它们已设置。我正在尝试使用数组 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com