~처럼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 VAR
VAR
쉘 변수가 설정된 경우 참입니다.
기능으로는:
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 };
이는 함수의 첫 번째 매개변수에 의해 명명된 변수에 대해 테스트합니다. 사용자가 함수에 매개변수를 제공했는지 여부를 확인하고 싶을 수도 있습니다.