あなたが探しているのは間接的です。
assertNotEmpty() {
: "${!1:? "$1 is empty, aborting."}"
}
これにより、次のようなことを行うと、スクリプトがエラー メッセージで中止されます。
$ foo=""
$ assertNotEmpty foo
bash: !1: foo is empty, aborting.
が空かどうかだけをテストしたい場合foo
は、スクリプトを中止する代わりに、関数の代わりにこれを使用します。
[[ $foo ]]
例えば:
until read -p "What is your name? " name && [[ $name ]]; do
echo "You didn't enter your name. Please, try again." >&2
done
また、空のパラメーターと設定されていないパラメーターの間には非常に重要な違いがあることに注意してください。これらの用語を混同しないように注意してください。空のパラメーターは、設定されているものの、空の文字列に設定されているだけです。設定されていないパラメーターは、まったく存在しないパラメーターです。
前の例はすべて、空のパラメーターをテストします。設定されていないパラメータをテストし、設定されているすべてのパラメータが空かどうかにかかわらず OK であると見なす場合は、次のようにします。
[[ ! $foo && ${foo-_} ]]
次のような関数で使用します。
assertIsSet() {
[[ ! ${!1} && ${!1-_} ]] && {
echo "$1 is not set, aborting." >&2
exit 1
}
}
渡すパラメーター名が設定されていないパラメーターを示す場合にのみ、スクリプトを中止します。
$ ( foo="blah"; assertIsSet foo; echo "Still running." )
Still running.
$ ( foo=""; assertIsSet foo; echo "Still running." )
Still running.
$ ( unset foo; assertIsSet foo; echo "Still running." )
foo is not set, aborting.