确保我的脚本所需的所有环境变量都已设置的最佳方法是什么? 目前,我有多个if-statement不是很整洁:
if [ -z "$VAR1" ]
then
echo VAR1 not set
exit
fi
if [ -z "$VAR2" ]
then
echo VAR2 not set
exit
fi
if [ -z "$VAR3" ]
then
echo VAR3 not set
exit
fi
有更好的方法吗?
答案 0 :(得分:3)
您可以使用间接:
vars="FOO BAR"
for var in $vars
do
[[ -z ${!var} ]] &&
echo "Variable ${var} is empty" ||
echo "The value of variable ${var} is ${!var}"
done
答案 1 :(得分:2)
使用for循环(你想要的变量集)。那不行吗?
答案 2 :(得分:1)
你可以将它们缩短很多:
[ -z "$FOO" ] && echo "FOO is empty"
[ -z "$BAR" ] && echo "BAR is empty"
更好的方法:
${FOO:?"FOO is null or not set"}
${BAR:?"BAR is null or not set"}
当然,如果你要测试的变量数量不是很少,那么按照建议的@Aviator进行循环可能对避免重复代码很有用。
在@Aviator回答时,我想建议定义一个注释良好的变量,其中包含要测试的变量列表。这样你就不会让你的代码变得神秘。
TEST_FOR_IS_SET="FOO BAR BAZ"
答案 3 :(得分:1)
我的shell库中有这个函数:
# Check that a list of variables are set to non-null values.
# $@: list of names of environment variables. These cannot be variables local
# to the calling function, because this function cannot see them.
# Returns true if all the variables are non-null, false if any are null or unset
varsSet()
{
local var
for var ; do
eval "[ -n \"\$$var\" ] || return 1"
done
}
我在这样的代码中使用它:
varsSet VAR1 VAR2 VAR3 || <error handling here>