「?」、そして*

「?」、そして*

スタックオーバーフロー投稿コマンドライン引数を処理するためのテンプレートがあります。

このテストは、[ $# == 0 ]bashスクリプトがパラメータなしで実行されるべきではないことを意味しますか?テンプレートなので、通常はスクリプトにパラメータが必ずしも必要ではないと思います。

case声明でこれら2つの状況の違いは何ですか*)"?")彼らは同じように見えます。

# --- Options processing -------------------------------------------
if [ $# == 0 ] ; then
    echo $USAGE
    exit 1;
fi

while getopts ":i:vh" optname
  do
    case "$optname" in
      "v")
        echo "Version $VERSION"
        exit 0;
        ;;
      "i")
        echo "-i argument: $OPTARG"
        ;;
      "h")
        echo $USAGE
        exit 0;
        ;;
      "?")
        echo "Unknown option $OPTARG"
        exit 0;
        ;;
      ":")
        echo "No argument value for option $OPTARG"
        exit 0;
        ;;
      *)
        echo "Unknown error while processing options"
        exit 0;
        ;;
    esac
  done

shift $(($OPTIND - 1))

param1=$1
param2=$2

ベストアンサー1

スクリプトには1つ以上のパラメータが必要です。パラメータがない場合は使用法情報を表示します。echo $USAGE >&2バグなので、これを行う必要があります。他のスクリプトではパラメータがゼロになる可能性があるため、変更する必要があります。一部の人々がこの主張を受け入れないようですi

「?」、そして*

はい、違います。

  • "?"彼は一つを探していると言った?。これは予期しないオプション(間違ったオプション)が見つかったときにgetoptsが返すものです。
  • *一致する他の項目が見つからない場合は、このようにしてください。これは起こってはいけませんが、起こることがあります。 getoptsのバグまたはプログラムのバグである可能性が高い(防御プログラミングを参照)。

おすすめ記事