如果该名称存储在另一个变量中,则可以使用 indirection 通过其名称访问变量。一个小例子:
x=1
name=x
echo "${!name}" # prints 1
使用这种方法,您只需要遍历要检查的变量的名称:
for name in FIRST_ENV_VAR SECOND_ENV_VAR ...; do
if [[ -z "${!name}" ]]; then
echo "Variable $name not set!"
exit 1
fi
done
您可能还想使用-z "${!name+x}"
接受设置为空字符串的变量,请参见here。
,
x=(
LANG
LC_MEASUREMENT
LC_PAPER
LC_MONETARY
LC_NAME
LC_ADDRESS
LC_NUMERIC
LC_TELEPHONE
LC_IDENTIFICATION
LC_TIME
)
for v in "${x[@]}"; do
echo "$v = \"${!v}\""
done
结果:
LANG = "en_US.UTF-8"
LC_MEASUREMENT = "en_US.UTF-8"
LC_PAPER = "en_US.UTF-8"
LC_MONETARY = "en_US.UTF-8"
LC_NAME = "en_US.UTF-8"
LC_ADDRESS = "en_US.UTF-8"
LC_NUMERIC = "en_US.UTF-8"
LC_TELEPHONE = "en_US.UTF-8"
LC_IDENTIFICATION = "en_US.UTF-8"
LC_TIME = "en_US.UTF-8"
有关使用bash
名称 ${!
进行间接扩展的说明,请参见}
(1)manual page。
,
您可以按照ENV_VAR_ARR
的方式创建要迭代的环境变量的列表。
然后使用for
循环遍历每个变量。
for循环将获取列表中的每个项目,将其分配给SOME_ENV_VAR
并执行do和done之间的命令,然后返回顶部,获取列表中的下一个项目,然后重复执行。
列表定义为一系列字符串,用空格分隔。
#!/bin/bash
ENV_VAR_ARR='ENV_1 ENV_2 ENV_3'
for SOME_ENV_VAR in $ENV_VAR_ARR
do
echo $SOME_ENV_VAR
if [[ -z "${!SOME_ENV_VAR}" ]]; then
echo "Warning - the $SOME_ENV_VAR environment variable isn't set"
exit 1
fi
done
本文链接:https://www.f2er.com/3125189.html