作为https://stackoverflow.com/a/13864829/说,
$ if [ -z ${aaa+x} ]; then echo "aaa is unset"; else echo "aaa is set"; fi
aaa is unset
可以测试变量是否aaa
已设置或未设置。
如何将检查包装到函数中?在 bash 中,以下嵌套参数扩展不起作用:
$ function f() { if [ -z ${$1+x} ]; then echo "$1 is unset"; else echo "$1 is set"; fi };
$ f aaa
bash: ${$1+x}: bad substitution
谢谢。
答案1
如果已设置命名变量,则测试将为true -v
。bash
if [ -v aaa ]; then
echo 'The variable aaa has been set'
fi
来自:help test
bash
-v VAR
VAR
如果设置了 shell 变量,则为 True 。
作为一个函数:
testset () {
if [ -v "$1" ]; then
printf '%s is set\n' "$1"
else
printf '%s is not set\n' "$1"
fi
}
作为采购脚本:
if [ -v "$1" ]; then
printf '%s is set\n' "$1"
else
printf '%s is not set\n' "$1"
fi
使用最后一个脚本:
source ./settest variablename
答案2
使用间接:
function f() { if [ -z "${!1+x}" ]; then echo "$1 is unset"; else echo "$1 is set"; fi };
这针对由函数的第一个参数命名的变量进行测试。您可能需要健全性检查用户是否已向函数提供了参数。