这个问题可能已经在其他的SO帖子中有了答案,但我不认为我能找到完全符合我的要求的答案。
我有一个(#!/usr/bin/env bash
)函数,它检查(环境)变量是否存在。
checkForVariable() {
if [[ -z $1 ]]; then
echo "Error: Define $1 environment variable"
exit 1
fi
}
但在错误消息中,我希望它告诉我缺少哪个环境变量。
如果我使用以下命令进行调用:
checkForVariable "${ENVIRONMENT_NAME}"
如果 ENVIRONMENT_NAME 没有设置,那么显然我会得到 "Error: Define environment variable",这并不有用。
如何更改我的函数,以便我可以向 checkForVariable 传递一个字符串而不是一个变量引用,即
checkForVariable "ENVIRONMENT_NAME"
我尝试过例如 if [[ -z "\$${1}" ]]; then 和 if [[ -z "${$1}" ]]; then,但这些方法都无法工作。
myvar=bla
设置了它。 - Maroun[[ "$(declare -p "$1")" =~ ^declare\ -x ]]
。 这实际上测试的是参数1中的变量名是否为导出的环境变量,而不是简单的全局变量。 - Léa Grisbash
版本支持它(我相信是4.4或更高版本),您也可以使用[[ ${!1@a} = *x* ]]
。 (${...@a}
运算符扩展为变量属性,而不是其值。)需要间接扩展来从$1
获取名称,而不是检查$1
的属性。 - chepner