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