4

[[ ! -v 1 ]]以下の関数に最初の位置パラメーターを渡しても、テストが失敗するのはなぜでしょうか。

shopt -os nounset

function foo {
  echo -n "$FUNCNAME: 1st positional parameter "
  [[ ! -v 1 ]] && echo "is missing." || echo is "\"$1\"."
}

他のテスト方法があることは知っていますが、なぜこの特定のテストがうまくいかないのでしょうか?

4

4 に答える 4

4

この場合、パラメータが設定されていないかどうかを確認します。

has_1() {
  if [[ -z "${1+present}" ]]; then 
    echo "no first param"
  else
    echo "given: $1"
  fi
}

パラメータ展開は、パラメータが 設定されていない${var+word}場合にのみ「単語」を返します。つまり、空の文字列を渡すと、関数は最初のパラメータが指定されたことを示します。

于 2012-11-13T17:04:29.903 に答える
3
if [ "$#" -gt "0" ]; then echo 'ok'; else echo '0'; fi
于 2012-11-13T17:43:34.647 に答える