Bashでフラグ付きの引数を取得する方法 質問する

Bashでフラグ付きの引数を取得する方法 質問する

bash では次のように位置指定されたパラメータを簡単に取得できることがわかっています。

$0または$1

次のようなフラグ オプションを使用して、各パラメータが何に使用されるかを指定できるようにしたいと思います。

mysql -u user -h host

位置ではなくフラグによって-u param値と値を取得する最良の方法は何ですか?-h param

ベストアンサー1

この例ではBashの組み込みgetoptsコマンドであり、Google Shell スタイルガイド:

a_flag=''
b_flag=''
files=''
verbose='false'

print_usage() {
  printf "Usage: ..."
}

while getopts 'abf:v' flag; do
  case "${flag}" in
    a) a_flag='true' ;;
    b) b_flag='true' ;;
    f) files="${OPTARG}" ;;
    v) verbose='true' ;;
    *) print_usage
       exit 1 ;;
  esac
done

注: 文字の後にコロンが続く場合 (例f:)、そのオプションには引数があると想定されます。

使用例:./script -v -a -b -f filename

getopts を使用すると、一般的な回答に比べていくつかの利点があります。

  • while条件ははるかに読みやすく、受け入れられるオプションが何であるかを示します。
  • よりクリーンなコード。パラメータの数を数えたりシフトしたりしない
  • オプションを結合することができます(例-a -b -c-abc

ただし、大きな欠点は、長いオプションをサポートしておらず、1 文字のオプションのみをサポートしていることです。

おすすめ記事