如何将变量设置/取消设置的检查包装到函数中?

如何将变量设置/取消设置的检查包装到函数中?

作为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 -vbash

if [ -v aaa ]; then
    echo 'The variable aaa has been set'
fi

来自:help testbash

-v VARVAR如果设置了 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 };

这针对由函数的第一个参数命名的变量进行测试。您可能需要健全性检查用户是否已向函数提供了参数。

相关内容