getoptコマンド(コマンドラインのオプションを解析する)
形式1
getopt 解析するオプション 解析される引数
形式2
getopt [オプション] [--] 解析するオプション 解析される引数
形式3
getopt [オプション] -o 解析するショートオプション名 [オプション] [--] 解析される引数
機能
解析される引数に指定されたコマンドラインを解析するオプションの指定内容で解析し,結果を標準出力に出力します。ショートオプション,ロングオプションとも解析できます。これによって,シェルスクリプトでの構文解析が容易になります。
次のどちらかで指定された場合は,形式1で指定されていると判定されます。
-
引数の最初のパラメーターが「-」で始まっていない場合
-
環境変数GETOPT_COMPATIBLEが設定されている場合
これ以外の場合は,-oオプションの指定があれば形式3,指定がなければ形式2で指定されていると判定されます。
引数
- 解析するオプション
-
解析するオプションの文字列を指定します。
ショートオプションを指定する場合は次の点に注意してください。
-
ショートオプションの先頭が「-」の場合,オペランドは出現個所で出力されます。ショートオプションの先頭が「+」の場合,オプションはオペランドの前に指定必須となります。
ただし,形式1では先頭にある「-」「+」は無視されます。
-
ショートオプションの先頭(「-」「+」の場合はその次の文字)が「:」の場合,解析される引数のオプションが,解析するオプションに指定されていなくてもエラーメッセージは出力されませんが,終了コードはエラーとなります。解析される引数は継続して解析されます。
なお,オプション文字またはオプション名の後ろに「:」または「::」を指定すると,次の内容を定義できます。
- オプション文字またはオプション名の後ろに「:」を指定した場合
-
オプション値が必須なオプションであることを示します。
この場合,解析される引数には,オプション名とオプション値を次の書式で指定します。
-
ショートオプション名とオプション値を続けて指定します。
$ getopt "xy:z" -yarg
-y arg --
-
ショートオプション名とオプション値の間にスペースを入れて指定します。
$ getopt "xy:z" -y arg
-y arg --
-
ロングオプション名とオプション値の間にスペースを入れて指定します。
$ getopt -o "abc" -l xyz: -- --xyz nml
--xyz 'nml' --
-
「ロングオプション名=オプション値」の形式で指定します。
$ getopt -o "abc" -l xyz: -- --xyz=nml
--xyz 'nml' --
-
- オプション文字またはオプション名の後ろに「::」を指定した場合
-
オプション値の指定が任意のオプションであることを示します。引数を指定する場合は,オプション文字またはオプション名の直後に指定する必要があります。
この場合,解析される引数には,オプション名とオプション値を次の書式で指定します。
-
ショートオプションの場合
オプション名とオプション値を続けて指定します。
-
ロングオプションの場合
「ロングオプション名=オプション値」の形式で指定します。
-
-
- 解析される引数
-
解析される引数として,オプション名,オプション値,オペランドを指定します。オプションの指定については,「8.1 コマンドの記述形式」を参照してください。
- オプションの指定方法
-
ショートオプションの場合は「-」の後ろにショートオプション名を指定し,ロングオプションの場合は「--」の後ろにロングオプション名を指定します。「--」の後ろにロングオプション名が続かない場合は,その個所でオプションの解析を終了し,以降のパラメーターをオペランドと判断します。
ロングオプション名は短縮して指定できます。その場合,出力結果にはロングオプションの完全名が出力されます。例を次に示します。
$ getopt -o "" -l "longZ" -- --lo --longZ --
短縮指定の場合はほかのオプションと区別できるように指定してください。あいまいな指定をすると,解析するオプションで先に定義したオプション名と判断されます。
- オプションとオペランドの指定順
-
デフォルトではオプションとオペランドの指定順に決まりはなく,オペランドの後ろに指定したオプションも解析されます。なお,次の環境変数を設定すると,オプションの指定順を設定できます。
-
環境変数ADSH_CMD_ARGORDERによるオプション指定順の設定
環境変数ADSH_CMD_ARGORDERを設定すると,解析される引数に指定するオプションは,オペランドの前での指定が必須となります。
-
環境変数POSIXLY_CORRECTによるオプション指定順の設定
環境変数POSIXLY_CORRECTを設定すると,解析される引数に指定するオプションは,オペランドの前での指定が必須となります。
環境変数ADSH_CMD_ARGORDERに記述したコマンドのほかに,Linux版のコマンドでも有効となります。
-
- オプション
-
形式2と形式3では次のオプションを指定できます。
解析結果の出力
解析結果は,オプション名,オプション値,オペランドに分類され,標準出力に出力されます。
形式2または形式3で指定した場合は,オプション値およびオペランドはシングルクォーテーションで囲まれます。-uを指定した場合は囲まれません。
ショートオプションの場合は「-」とオプション名,ロングオプションの場合は「--」と完全なオプション名が,1つのオプションとして出力されます。
オプション(オプション名・オプション値)とオペランドの間には,区切りとして「--」が出力されます。ただし,ショートオプションの先頭に「-」を指定した場合はこの限りではありません。
オプション解析でエラーが発生しても処理を継続し,後続のパラメーターのオプションを解析します。例を次に示します。
$ getopt "xyz" -w -x getopt: invalid option -- w -x --
終了コード
終了コード |
意味 |
---|---|
0 |
正常終了 |
1 |
エラー終了
|
2 |
エラー終了
|
3 |
エラー終了
|
使用例
-
コマンドを形式1で実行する例を示します。
$ getopt "xy:z" -z -y arg1 arg2 -z -y arg1 -- arg2
-
コマンドを形式2で実行する例を示します。
$ getopt -q "xy:z" -z -y arg1 arg2 -z -y 'arg1' -- 'arg2'
-
コマンドを形式3で実行する例を示します。
$ getopt -o "xy:z" -- -z -y arg1 arg2 -z -y 'arg1' -- 'arg2'
-
解析結果を位置パラメーターに設定する例を示します。
実行ファイル
OPT=`getopt -o abc:d: -- -a -b` eval set -- "$OPT" echo $1 echo $2 echo $3
実行結果
-a -b --
-
オプションエラーのメッセージを表示します。
このメッセージは,コマンドを実行するプラットフォームによって異なる場合があります。Windowsの例を次に示します。
C:\> getopt -z getopt: illegal option -- z usage: getopt optstring parameters getopt [options] [--] optstring parameters getopt [options] -o optstring [options] [--] parameters