hack のためのネタ帳, etc,,,

bash の組み込みコマンドである getopts を使ったオプション解析の例

使用例

getopts_sample.sh

#!/usr/bin/env bash

while getopts ab: OPTION; do
  case "$OPTION" in
  a) echo    "alpha: $OPTION" ;;
  b) echo -e "bravo: $OPTION ${OPTARG@Q}" ;;
  esac
done
shift $(( OPTIND - 1 ))
echo "ARGS[$#]: $@"

実行結果

$ ./getopts_sample.sh -a -ab"p p" -b"q q" -b "r r" x y
alpha: -a
alpha: -a
bravo: -b 'p p'
bravo: -b 'q q'
bravo: -b 'r r'
ARGS[2]: x y

-abp のように複数のオプションをまとめて指定することは出来るが、長いオプションが使えないことに加えて、
option は必ず positional よりも前に記述する必要があるため使い勝手はイマイチ。

これらの制約を解消したい場合は通常コマンドである getopt を使うと良い。

ただし getopts と case .. esac とでオプションの定義を冗長に繰り返さないといけないことに加えて、
特にオプションが大量にある場合 getopts のところが凄く長くなってしまうのが面倒である点は getopt でも解消できない。

参考

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます