[[ ! -v 1 ]]
以下の関数に最初の位置パラメーターを渡しても、テストが失敗するのはなぜでしょうか。
shopt -os nounset
function foo {
echo -n "$FUNCNAME: 1st positional parameter "
[[ ! -v 1 ]] && echo "is missing." || echo is "\"$1\"."
}
他のテスト方法があることは知っていますが、なぜこの特定のテストがうまくいかないのでしょうか?
[[ ! -v 1 ]]
以下の関数に最初の位置パラメーターを渡しても、テストが失敗するのはなぜでしょうか。
shopt -os nounset
function foo {
echo -n "$FUNCNAME: 1st positional parameter "
[[ ! -v 1 ]] && echo "is missing." || echo is "\"$1\"."
}
他のテスト方法があることは知っていますが、なぜこの特定のテストがうまくいかないのでしょうか?
この場合、パラメータが設定されていないかどうかを確認します。
has_1() {
if [[ -z "${1+present}" ]]; then
echo "no first param"
else
echo "given: $1"
fi
}
パラメータ展開は、パラメータが 設定されていない${var+word}
場合にのみ「単語」を返します。つまり、空の文字列を渡すと、関数は最初のパラメータが指定されたことを示します。
if [ "$#" -gt "0" ]; then echo 'ok'; else echo '0'; fi