getopt - コマンドオプションを解析する(機能強化)

SYNOPSIS

      getopt optstring parameters
      getopt [options] [--] optstring parameters
      getopt [options] -o|--options optstring [options] [--] parameters

DESCRIPTION

getoptは、コマンドラインのオプションを分割(パース)して、シェル手続きで簡単にパースできるようにしたり、有効なオプションかどうかをチェックしたりするのに使われる。 そのためにGNU getopt(3)ルーチンを使用する。

getopt が呼び出されるパラメータは 2 つの部分に分けられる。 getopt がパースする方法を変更するオプション (SYNOPSIS 内のオプションと optstring) と、パースされるパラメータ (SYNOPSIS 内のパラメータ) である。 2番目の部分は、オプション引数ではない最初のパラメータ、 または '--' が最初に出現した後のパラメータから始まる。 最初の部分で'-o'または'--options'オプションが見つからない場合、 2番目の部分の最初のパラメーターが短いオプション文字列として使われる。

環境変数 GETOPT_COMPATIBLE が設定されている場合、 または最初のパラメータがオプションでない場合 (SYNOPSIS の最初の書式である '-' で始まらない場合)、 getopt は他のバージョンの getopt(1) と互換性のある出力を生成する。 パラメータシャッフルを行い、オプション引数を認識する (詳細については COMPATIBILITY を参照のこと)。

従来の getopt(1) の実装は、引数やオプション以外のパラメータに含まれる空白文字やその他の (シェル固有の) 特殊文字に対処できない。 この問題を解決するために、この実装では引用符で囲まれた出力を生成することができる。 これはこれらの文字を保持する効果があるが、他のバージョンと互換性のない方法(SYNOPSISの2番目か3番目の形式)でgetoptを呼び出さなければならない。 この拡張バージョンの getopt(1) がインストールされているかどうかを調べるには、特別なテストオプション (-T) を使用する。

OPTIONS

-a, --alternative
長いオプションは'-'で始まるようにする。
-h, --help
ヘルプテキストを表示して終了する。 それ以外の出力は生成されない。
-l, --longoptions longopts
認識する長い(複数文字の)オプション。 カンマで区切ることで、一度に複数のオプション名を指定できる。 このオプションは複数回指定でき、longoptsは累積される。 longopts の各長いオプション名の後には、必須引数を持つことを示すコロン 1 つと、 オプション引数を持つことを示すコロン 2 つを続けることができる。
-n, --name progname
getopt(3) ルーチンがエラーを報告するときに使われる名前。 getopt(1) のエラーは getopt から来たものとして報告されることに注意。
-o, --options shortopts
認識される短い(1文字の)オプション。 このオプションが見つからない場合、 getopt の最初のパラメータのうち、 '-' で始まらないもの(オプション引数でないもの)が、 短いオプション文字列として使われる。 shortopts の各ショートオプション文字の後には、必須引数であることを示すコロンを 1 つ、 オプション引数であることを示すコロンを 2 つ続けることができる。 shortoptsの最初の文字を'+'または'-'にすることで、オプションの解析方法と出力の生成方法に影響を与えることができる(詳細は#SCANNING MODESセクションを参照)。
-q, --quiet
getopt(3)によるエラー報告を無効化。
-Q, --quiet-output
通常の出力を生成しない。 -q も使用しない限り、エラーは getopt'(3) によって報告される。
-s, --shell shell
シェルの引用規約を設定する。 -sオプションが与えられない場合は、BASHの規約が使用される。 現在有効な引数は 'sh'、'bash'、'csh'、'tcsh' である。
-T, --test
getopt(1) がこの拡張バージョンか古いバージョンかをテストする。 これは出力を生成せず、エラーステータスを 4 に設定する。 getopt(1) の他の実装、および環境変数 GETOPT_COMPATIBLE が設定されている場合のこのバージョンは、 '--' とエラーステータス 0 を返す。
-u, --unquoted
出力を引用符で囲まない。 このモードでは (他の getopt(1) の実装でそうであるように) 空白文字や特殊な (シェル依存の) 文字が大混乱を引き起こす可能性があることに注意。
-V, --version
バージョン情報を表示して終了する。 他の出力は生成されない。

PARSING

このセクションでは、getoptのパラメータの2番目の部分(SYNOPSISのパラメータ)の形式を指定する。 次のセクション(#OUTPUT)では、生成される出力について説明する。 これらのパラメータは通常、シェル関数が呼び出されたときのパラメータである。 シェル関数が呼び出された各パラメータが、getoptのパラメータリストにある1つのパラメータに正確に対応するように注意しなければならない(#EXAMPLESを参照)。 すべての解析は GNU getopt(3) ルーチンによって行われる。

パラメータは左から右に解析される。 各パラメータは、短いオプション、長いオプション、オプションの引数、オプションでないパラメータに分類される。

単純な短いオプションは、'-'の後に短いオプション文字が続くものである。 オプションに必須引数がある場合、その引数はオプション文字の直後に書くか、次のパラメータとして書く(つまり、コマンドライン上で空白で区切る)。 オプシ ョ ンにオプシ ョ ナル引数があ る と き は、 オプシ ョ ン文字の後に直接書 く 必要があ る。

1つの'-'の後に複数の短いオプションを指定することも可能で、 その場合、すべてのオプション(おそらく最後のオプションを除く)に 必須引数やオプション引数を指定することはできない。

長いオプションは通常、'--'で始まり、長いオプション名が続く。 オプションに必須引数がある場合、その引数は長いオプション名の後に '=' で区切って直接書くか、次の引数として書く(つまり、コマンドライン上で空白で区切る)。 オプションに省略可能な引数がある場合は、長いオプション名の直後に '=' で区切って書かなければならない('=' の後ろに何も書かないと、引数がないものとして解釈される。) 長いオプションは、省略形があいまいでない限り、省略することができる。

で始まらず、前のオプションの必須引数でもない各パラメータは、 非オプションパラメータである。 '--'パラメータ以降の各パラメータは、常に非オプションパラメータとして解釈される。 環境変数 POSIXLY_CORRECT が設定されている場合、 または短いオプション文字列が '+' で始まっている場合、 最初の非オプションパラメータが見つかった時点で、 残りのすべてのパラメータは非オプションパラメータとして解釈される。

OUTPUT

出力は、前のセクションで説明した各要素に対して生成される。 出力は、非オプション・パラメーターを除き、入力で指定された要素と同じ順序で行われる。 出力は、互換(引用符なし)モードで行うこともできるし、引数や非オプション パラメータ内の空白文字やその他の特殊文字を保持するように行うこともできる(引用符を参照)。 出力がシェルスクリプトで処理されるとき、それは(ほとんどのシェル言語でshiftコマンドを使用して)1つずつ処理することができる個別の要素で構成されているように見える。 これはunquotedモードでは不完全である、 要素が空白や特殊文字を含むと、予期しない場所で分割されることがあるからだ。

必須引数が見つからない、またはオプションが認識されないなど、パラメータの解析に問題がある場合、標準エラー出力にエラーが報告され、問題のある要素の出力は行われず、ゼロ以外のエラーステータスが返される。

短いオプションの場合、1つの '-' とオプション文字が1つのパラメータとして生成される。 オプションに引数がある場合、次のパラメータが引数になる。 オプションが引数を取るが何も見つからなかった場合、次のパラメータが生成されるが、クォートモードでは空であり、クォートされていない (互換性のある) モードでは 2 番目のパラメータは生成されない。 他の多くの getopt(1) 実装はオプション引数をサポートしていないことに注意。

複数の短いオプションが単一の '-' の後に指定された場合、 それぞれが独立したパラメータとして出力される。

長いオプションの場合、'--' と完全なオプション名が 1 つのパラメータとして生成される。 これは、オプションが省略されているか、入力で単一の '-' で指定されているかに関係なく行われる。 引数は短いオプションと同様に扱われる。

通常、すべてのオプションとその引数が生成されるまで、 オプション以外のパラメータ出力は生成されない。 その後、'--'が1つのパラメータとして生成され、 その後に非オプション・パラメータが見つかった順に、 それぞれ別のパラメータとして生成される。 短いオプション文字列の最初の文字が '-' だった場合のみ、 非オプション・パラメータの出力は、入力で見つかった場所に生成される (これは、SYNOPSIS の最初の書式が使われている場合はサポートされない。 この場合、'-' と '+' の前にあるものはすべて無視される)。

QUOTING

互換モードでは、引数やオプション以外のパラメータに含まれる空白文字や「特殊」文字は 正しく処理されない。 出力はシェルスクリプトに送られるため、スクリプトは出力をどのように個別の パラメータに分割すればよいのかわからない。 この問題を回避するために、この実装ではクォート処理を提供している。 これは、各パラメーターを引用符で囲んで出力を生成するというものである。 この出力が再び(通常はシェルのevalコマンドによって)シェルに供給されるとき、パラメータごとに正しく分割される。

環境変数GETOPT_COMPATIBLEが設定されている場合、SYNOPSISの最初の形式が使用されている場合、またはオプション'-u'が見つかった場合、クォートは有効にならない。

シェルによって引用符の付け方が異なる。 '-s'オプションで使用するシェルを選択できる。 現在、以下のシェルがサポートされている: shbashcshtcshである。 shのようなクォート規則とcshのようなクォート規則である。 他のシェルスクリプト言語を使用している場合でも、これらのフレーバーのいずれかを使用できる可能性がある。

SCANNING MODES

短いオプション文字列の最初の文字は、特別なスキャンモードを示すために '-'または'+'にすることができる。 SYNOPSISの最初の呼び出し形式が使われる場合、それらは無視される。

最初の文字が'+'の場合、または環境変数POSIXLY_CORRECTが設定されている場合、 オプション引数でない最初のパラメータ(すなわち、'-'で始まらないパラメータ)が 見つかり次第、解析は停止する。 残りのパラメータは、すべて非オプション・パラメータとして解釈される。

最初の文字が'-'の場合、非オプション・パラメータは見つかった場所に出力される。 通常の操作では、'--'パラメータが生成された後、それらはすべて出力の最後に集められる。 この'--'パラメーターも生成されるが、 このモードでは常に最後のパラメーターとなることに注意。

COMPATIBILITY

このバージョンの getopt(1) は、他のバージョンと可能な限り互換性があるように書かれている。 通常、何も変更することなくこのバージョンと置き換えることができ、いくつかの利点もある。

getopt の最初のパラメータの最初の文字が '-' でない場合、 getopt は互換モードに入る。 getoptは最初のパラメータを短いオプションの文字列として解釈し、他のすべての引数は解析される。 環境変数POSIXLY_CORRECTが設定されていない限り、パラメータのシャッフルは行われる(つまり、オプション以外のパラメータはすべて最後に出力される)。

環境変数GETOPT_COMPATIBLEは、getoptを強制的に互換モードにする。 この環境変数とPOSIXLY_CORRECTの両方を設定すると、「難しい」プログラムに対して100%の互換性を提供する。 しかし、通常はどちらも必要ない。

互換モードでは、短いオプション文字列の先頭の '-' と '+' は無視される。

RETURN CODES

getoptは、解析に成功した場合はエラーコード0を返し、getopt(3)がエラーを返した場合は1を返し、自身のパラメータを理解していない場合は2を返し、メモリ不足などの内部エラーが発生した場合は3を返し、-T付きで呼び出された場合は4を返す。

EXAMPLES

(ba)sh(t)cshのスクリプト例は、getopt(1)ディストリビューションで提供されており、/usr/share/doc/util-linux/getopt/ディレクトリにインストールされている。

ENVIRONMENT

POSIXLY_CORRECT
この環境変数は getopt(3) ルーチンで調べられる。 この環境変数が設定されている場合、オプションでもオプション引数でもないパラメータが見つかると、すぐに解析が停止する。 残りのすべてのパラメータも、'-' で始まるかどうかに関係なく、非オプションパラメータとして解釈される。
GETOPT_COMPATIBLE
getoptは、SYNOPSISで指定された最初の呼び出しフォーマットを強制的に使用する。

BUGS

getopt(3) は、空のオプション引数を与えられたオプション引数を持つ長いオプションを解析することができる (しかし、短いオプションに対してはこれを行うことができない)。 この getopt(1) は、空のオプション引数は存在しないものとして扱う。

短いオプション変数がまったく必要ない場合の構文は、あまり直感的ではない (明示的に空文字列に設定しなければならない)。

AUTHOR

Frodo Looijaard ⟨frodo@frodo.looijaard.name⟩

SEE ALSO

bash, tcsh, getopt(3)

AVAILABILITY

The getopt command is part of the util-linux package and is available from Linux Kernel Archive ⟨https://www.kernel.org/pub/linux/utils/util-linux/⟩.

External link