Hitachi

Advanced Shell 


8.4.14 getoptコマンド(コマンドラインのオプションを解析する)

形式1

getopt 解析するオプション 解析される引数

形式2

getopt [オプション] [--] 解析するオプション 解析される引数

形式3

getopt [オプション] -o 解析するショートオプション名 [オプション] [--] 解析される引数

機能

解析される引数に指定されたコマンドラインを解析するオプションの指定内容で解析し,結果を標準出力に出力します。ショートオプション,ロングオプションとも解析できます。これによって,シェルスクリプトでの構文解析が容易になります。

次のどちらかで指定された場合は,形式1で指定されていると判定されます。

これ以外の場合は,-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では次のオプションを指定できます。

  • -l ロングオプション名

  • -longoptions=ロングオプション名

    解析するロングオプションを指定します。

    オプションを複数指定する場合は,「,」(コンマ)またはスペースで区切って一度に指定するか,このオプションで複数回指定します。

  • -n プログラム名

  • --name=プログラム名

    オプション解析のエラーメッセージで出力するコマンド名を「getopt」からここで指定したプログラム名へ変更します。

  • -q

  • --quiet

    解析される引数のオプション解析のエラーメッセージを抑止します。

  • -Q

  • --quiet-output

    解析結果の出力を抑止します。

  • -u

  • --unquoted

    形式2,形式3の解析結果のオプション値とオペランドをクォーテーションで囲まないようにします。

  • -o 解析するショートオプション名

  • --options=ショートオプション名

    解析するショートオプションを指定します。

    複数回指定した場合,最後に指定した値が有効になります。

    ショートオプションに「W;」を指定し,解析される引数に「-W」指定のロングオプション名を指定した場合,ロングオプション名として解釈されます。

解析結果の出力

解析結果は,オプション名,オプション値,オペランドに分類され,標準出力に出力されます。

形式2または形式3で指定した場合は,オプション値およびオペランドはシングルクォーテーションで囲まれます。-uを指定した場合は囲まれません。

ショートオプションの場合は「-」とオプション名,ロングオプションの場合は「--」と完全なオプション名が,1つのオプションとして出力されます。

オプション(オプション名・オプション値)とオペランドの間には,区切りとして「--」が出力されます。ただし,ショートオプションの先頭に「-」を指定した場合はこの限りではありません。

オプション解析でエラーが発生しても処理を継続し,後続のパラメーターのオプションを解析します。例を次に示します。

$ getopt "xyz" -w -x
getopt: invalid option -- w
 -x --

終了コード

終了コード

意味

0

正常終了

1

エラー終了

  • 解析される引数に指定したオプションが,解析するオプションに定義されていません。

2

エラー終了

  • getoptコマンドのオプションが不正です。

3

エラー終了

  • 終了コード1,2以外のエラーです。

使用例