변수 설정/설정 해제에 대한 검사를 함수로 어떻게 래핑할 수 있나요?

변수 설정/설정 해제에 대한 검사를 함수로 어떻게 래핑할 수 있나요?

~처럼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

명명된 변수가 설정된 경우 테스트는 참이 됩니다 -v.bash

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

에서 help test:bash

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

이는 함수의 첫 번째 매개변수에 의해 명명된 변수에 대해 테스트합니다. 사용자가 함수에 매개변수를 제공했는지 여부를 확인하고 싶을 수도 있습니다.

관련 정보