変数の設定/設定解除のチェックを関数にどのようにラップできますか?

変数の設定/設定解除のチェックを関数にどのようにラップできますか?

〜のように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

名前付き変数が設定されている場合、テストは真になります-vbash

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

からhelp testbash

-v VARVARシェル変数が設定されている場合は真です。

機能として:

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 };

これは、関数の最初のパラメータによって指定された変数をテストします。ユーザーが関数にパラメータを提供したかどうかを確認したい場合があります。

関連情報