getopts — ユーティリティー・オプションを解析する

形式

getopts opstring name [arg …]

説明

getopts は、標準 POSIX.2POSIX.2 オプション構文に続くパラメーターのリストからオプションとその引数 (先頭にハイフン (–) が付き、引数値が続くことがある単一文字) を取得します。 通常、シェル・スクリプトは、渡された引数を構文解析するため に getopts を使用します。 getopts コマンド行に arg 引数で 引数を指定すると、getopts はスクリプト・コマンド行の代わりに それらの引数を構文解析します (set を参照)。

オプション

opstring
スクリプトが認識するすべてのオプション文字を与えます。例えば、スクリプトが –a–f、および –s を認識する場合は 、opstringafs です。オプション文字の後に引数値、または 値のグループを続けたい場合は、a:fs のように、文字の後にコロンを置きます。 これは 、–a オプションが –a value の形式である と getopts が期待することを示します。通常、オプション文字と value との間は 、1 つまたはそれ以上のブランクで分離されます。しかし、getopts は、–avalue のように、文字に直接続く値も取り扱います。opstring には、疑問符 (?) 文字を 含めることはできません。
name
シェル変数の名前を指定します。getopts は、呼び出されるたびに 定位置パラメーターから次のオプションを入手し、オプション文字をシェル変数 name に入れます。

getopts が疑問符 (?) を name に 入れるのは、opstring に現れないオプションを検出した場合、またはオプション value が欠落している場合です。

arg …
スクリプト・コマンド行の各オプションには、数値の指標 があります。最初に検出されたオプションは指標 1、2 番目は指標 2、以下同様になります。スクリプト・コマンド行からオプションを入手すると、getopts は スクリプトの指標をシェル変数 OPTIND に格納します。

オプション文字の後に引数が続いている (opstring 内 の : で示される) 場合は、getopts は引数をストリングとして シェル変数 OPTARG に格納します。オプションが引数を取らない場合、または getopts が期待している引数を検出できなかった場合、getoptsOPTARG を設定解除します。

getopts は、オプションの終わりに達すると、1 の状況値で終了し、また name を文字 ? に設定し、OPTIND を オプションの後の最初の引数の指標に設定します。getopts は、オプションの終わりを以下の状況のいずれかによって認識します。
  • で始まっていない引数を検出した
  • オプションの終わりをマーキングする特別な引数 –– を検出した
  • エラー (例えば、認識できないオプション文字) があった

OPTIND および OPTARG は、シェル・スクリプトにローカルな変数です。これらをエクスポートしたい場合は、明示的に行う必要があります。スクリプトが getopts を 呼び出して OPTIND1 に設定した場合、新しいパラメーターのセット (現行の定位置パラメーター または新しい arg 値) を指定して、もう一度 getopts を呼び出すことができます。

デフォルトでは、認識できないオプションまたはその他のエラーを検出すると、getopts は エラー・メッセージを出します。このようなメッセージを印刷したくない場合は 、opstring の最初の文字としてコロンを指定してください。

以下は、シェル・スクリプト内で getopts を使用した例です。
# Example illustrating use of getopts builtin. This
# shell script would implement the paste command,
# using getopts to process options, if the underlying
# functionality was embedded in hypothetical utilities
# hpaste and vpaste, which perform horizontal and
# vertical pasting respectively.
#
paste=vpaste    # default is vertical pasting
seplist=" " # default separator is tab

while getopts d:s o
do      case "$o" in
        d)      seplist="$OPTARG";;
        s)      paste=hpaste;;
        [?])  print >&2 "Usage: $0 [-s] [-d seplist] file …"
                exit 1;;
        esac
done
shift $OPTIND-1

# perform actual paste command
$paste -d "$seplist" "$@"

環境変数

getopts は、以下の環境変数を使用します。
OPTARG
getopts が検出したオプション引数の値を格納します。
OPTIND
次に処理する引数の指標が入ります。

ローカライズ

getopts は、以下のローカライズ環境変数を使用します。
  • LANG
  • LC_ALL
  • LC_CTYPE
  • LC_MESSAGES

詳しくは、ローカライズを参照してください。

使用上の注意

getopts は組み込みシェル・コマンドです。

終了値

0
getopts は、オプションの形式のスクリプト・コマンド行を 検出した。これは、オプションが認識できるかどうかとは関係ない。
1
getopts はオプションの終わりに達したか、エラーが発生した。
2
コマンド行のオプションが正しくないための失敗。

移植性

POSIX.2, X/Open 移植性ガイド.

UNIX システムでは、getopts は Korn シェルと Bourne シェルの 両方に組み込まれています。

関連情報

sh