Provided by: manpages-ja_0.5.0.0.20140515+dfsg-2_all bug

名前

       getopt - コマンドの引き数を解析する (拡張版)

書式

       getopt optstring parameters

       getopt [options] [--] optstring parameters

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

説明

       getopt  は、シェル手続きで簡単に解析できるように、 コマンドラインのオプションを分解 (解析)
       するために使われる。 また、正しいオプションであるかを調べるためにも使われる。 これを行うた
       めに GNU getopt(3) ルーチンが使われる。

       getopt  を呼び出すときに使われたパラメータは、 2 つの部分に分けることができる: getopt の解
       析動作を変更するオプション  (「書式」  セクションの  options-o|--options  optstring)
       と、解析されるパラメータ  (「書式」 セクションの parameters) である。 第 2 部分は、 最初の
       オプションではないパラメータ (オプション引き数ではないもの) の後か、 最初の ` -- '  の後か
       ら始まる。  第 1 部分に `-o' または `--options' オプションが見つからない場合、 第 2 部分の
       最初のパラメータは 短い形式のオプション文字列として使われる。

       環境変数 GETOPT_COMPATIBLE が設定された場合、 または最初のパラメータがオプションでなかった
       場合 (`-' で始まっていない場合。 これは 「書式」 セクションの最初の形式である)、 getopt は
       他のバージョンの getopt(1) と互換性のある出力を生成する。 この場合でも、パラメータの並べ替
       えを行い、オプション引き数を認識する (詳細は 「互換性」 セクションを参照すること)。

       伝統的な getopt(1) の実装では、引き数やオプションではないパラメータで 空白と他の (シェル特
       有の)  特殊文字を組み合わせて使うことができない。  この問題を解決するため、   この実装では
       クォートした出力を生成する。  この出力は、シェル (通常は eval コマンドが使われる) によって
       再び解析されなければならない。  これにはクォートすべき文字列を保護するという効果があるが、
       getopt を他のバージョンとは互換性のない方法 (「書式」 セクションの 2, 3 番目の形式) で呼び
       出さなければならない。 拡張版の getopt(1) がインストールされているかどうかを調べるには、特
       別なテストオプション (-T) を使うことができる。

オプション

       -a, --alternative
              長いオプションを 1 個の `-' で始めることができるようにする。

       -h, --help
              ちょっとした使用ガイドを表示し、正常終了する。 それ以上は何も出力されない。

       -l, --longoptions longopts
              認識させる長い (複数文字の) オプションを指定する。 2 つ以上のオプション名をコンマで
              区切って一度に指定できる。 このオプションは 2 回以上指定することができる。 longopts
              は交換可能である。  longopts で指定されている長いオプション名の後に、1 個のコロンを
              続けることができる。   これは、そのオプションに引き数が必須であることを示す。    ま
              た、長いオプション名の後に  2 個のコロンを続けることもできる。 これは、そのオプショ
              ンが引き数を取る場合もあることを示す。

       -n, --name progname
              エラーが報告された場合に getopt(3) ルーチンが使うプログラム名。  このオプションを指
              定しても、 getopt(1) のエラーは getopt から発生したものとして表示される点に注意する
              こと。

       -o, --options shortopts
              認識させる短い (1 文字の) オプションを指定する。 このオプションが指定されていない場
              合、  getopt の 1 個の `-' で始まっていない最初のパラメータ (かつ、オプションの引き
              数でないもの) が 短いオプションの文字列として使われる。 shortopts  に指定されている
              短いオプション文字の後に、1 個のコロンを続けることができる。 これは、そのオプション
              に引き数が必須であることを示す。 また、長いオプション名の後に 2  個のコロンを続ける
              こともできる。  これは、そのオプションが引き数を取る場合もあることを示す。 オプショ
              ンの解析法と出力の生成法を変更するために、 shortopts の最初の文字を `+' または  `-'
              にすることができる (詳細は 「スキャンモード」 セクションを参照すること)。

       -q, --quiet
              getopt(3) によるエラー表示をさせない。

       -Q, --quiet-output
              通常の出力を生成させない。 -q を指定しない限り、 getopt(3) によってエラーが表示され
              る。

       -s, --shell shell
              指定したシェルのクォート方法に設定する。 -s オプションが指定されていない場合、 BASH
              でのクォート方法が使われる。  指定可能な引き数は、現在のところ `sh', `bash', `csh',
              `tcsh' である。

       -u, --unquoted
              出力をクォートしない。 空白と (シェル依存の) 特殊文字は、(他の getopt(1) の実装と同
              じように) このモードでは大混乱を引き起こす。

       -T --test
              getopt(1) が拡張バージョンか古いバージョンかをテストする。 何も出力しないが、エラー
              ステータスを 4 に設定する。 他の getopt(1) の実装の場合や、このバージョンで環境変数
              GETOPT_COMPATIBLE が設定されている場合、 `--' を返し、エラーステータスを 0 に設定す
              る。

       -V, --version
              バージョン情報を出力し、正常終了する。 それ以上は何も出力されない。

解析

       このセクションでは getopt のパラメータの第 2 部分 (「書式」  セクションの  parameters)  の
       フォーマットについて説明している。  次のセクション (出力) では生成される出力について説明し
       ている。 これらのパラメータは、一般に、シェル関数が呼ばれたときのパラメータである。 シェル
       関数が呼ばれたときの各パラメータが getopt のパラメータリストにある 1 つのパラメータに 厳密
       に対応している点に注意しなければならない (「例」 セクションを参照すること)。  全ての解析が
       GNU getopt(3) ルーチンで行われる。

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

       簡単な短いオプションは、 `-' の後に短いオプション文字が続くものである。 オプションが引き数
       を必須としている場合、  引き数はオプション文字の直後に書くことができる。 (コマンドライン上
       で空白で区切られた) 次のパラメータとして書くこともできる。  オプションが引き数を取ることも
       取らないこともできる場合、  引き数が存在するならば、オプション文字の直後に書かなければなら
       ない。

       (最後のオプションを除く) 全てのオプションが 必須の引き数もオプションとしての引き数も必要と
       しない限り、 1 個の `-' の後に複数の短いオプションを指定することができる。

       長いオプションは、通常  `--' の後に長いオプション名が続く。 オプションが引き数を必須として
       いる場合、 `=' で区切って長いオプション名の直後に書くことができる。  また、(コマンドライン
       上で空白で区切って)  次の引き数として書くこともできる。 オプションが引き数を取ることも取ら
       ないこともできる場合、 引き数が存在するならば、 `=' で区切って長いオプション名の直後に書か
       なければならない (`=' をオプションの後に書いたにも関らず、その後に何も指定しなかった場合、
       引き数が存在しないものとして解釈される。 これはちょっとしたバグである。 「バグ」  セクショ
       ンを参照すること)。  長いオプションは、省略形が曖昧でない  (他のオプションと区別がつく) 限
       り、 短く省略することができる。

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

出力

       出力は前のセクションで説明した各要素に対して生成される。  出力は要素が入力で指定された順番
       で生成される。  ただし、オプションではないパラメータは例外である。 出力は 互換 (クォートさ
       れない) モードで生成することができる。  また、引き数とオプションではないパラメータに含まれ
       る空白と他の特殊文字を 保護するモードで出力することもできる (「クォート」 セクションを参照
       すること)。 出力がシェルスクリプトで処理される場合、  その出力は別々の要素から構成されてい
       るようにみえる。  この要素は (大部分のシェル言語では shift コマンドを使って) 1 つ 1 つ処理
       できる。 この動作はクォートされないモードでは不完全である。 なぜなら、要素に空白や特殊文字
       があった場合、 要素が期待していない箇所で分割されてしまうからである。 必須とされる引き数が
       見つからない、またはオプションが認識されない、  といった原因でパラメータ解析に問題がある場
       合、  標準エラーにエラーが表示される。 このとき、不正な要素に対しては何も出力されず、 0 で
       ないエラーステータスが返される。

       短いオプションに対して、出力として 1 個の `-' とオプション文字が生成される。  オプションが
       引き数を取る場合、次のパラメータが引き数になる。  オプションが引き数を取っても取らなくても
       よい場合に、 引き数が指定されていないと、 クォートモードでは次のパラメータが生成されるが空
       のパラメータになる。 この場合、クォートしない (互換) モードでは 2 番目のパラメータは生成さ
       れない。 他の多くの getopt(1) の実装では、取っても取らなくてもよい引き数は  サポートされて
       いない点に注意すること。

       複数の短いオプションが  1 個の `-' の後に指定されている場合、 各オプションは区切られたパラ
       メータとして出力に表示される。

       長いオプションに対して、 `--' と完全なオプション名が 1 つのパラメータとして生成される。 「
       入力でオプションが略書きされている。  または、オプションが 1 個の `-' を使って指定されてい
       る。」ということに関らず、この動作をする。 引き数は短いオプションとして扱われる。

       通常、全てのオプションとその引き数が出力に生成されるまで、  オプションではないパラメータは
       出力されない。 そして、1 個のパラメータとして `--' が生成される。 その後にオプションではな
       いパラメータは、 見つかった順番で別々のパラメータとして生成される。 短いオプション文字列の
       最初の文字が `-' である場合にのみ、 オプションではないパラメータは入力で見つかった位置で出
       力される (この動作は  「書式」  セクションの最初の形式が使われた場合にはサポートされない。
       この場合、 `-' と `+' が前に付く全てのパラメータが無視される)。

クォート

       互換モードでは、引き数やオプションではないパラメータにある  空白や「特殊」文字は正しく扱わ
       れない。  この出力はシェルスクリプトに与えられるので、  スクリプトは、出力をどのようにして
       個々のパラメータに 分割すべきなのかを知らない。 この問題を回避するため、この実装ではクォー
       ト機能を提供する。 これは、各パラメータをクォートして出力を生成する、という手法を取る。 こ
       の出力がもう一度シェル  (通常はシェルの eval コマンド) に与えられた場合、 出力は個々のパラ
       メータに正しく分割される。

       環境変数 GETOPT_COMPATIBLE が設定された場合・ 「書式」  セクションの最初の形式が使われた場
       合・ `-u' オプションが指定された場合、クォートは行われない。

       クォートの規則はシェルごとに異なる。  使用しているシェルを選択するために `-s' オプションを
       使うことができる。 以下のシェルで正しく機能する: `sh', `bash', `csh', `tcsh'.  実際には、2
       つの「方式」に分類される:  sh 式のクォート規則と csh 式のクォート規則である。 他のシェルス
       クリプト言語を使っている場合でも、 これらの方式のどちらかが使える可能性がある。

スキャンモード

       特殊なスキャンモードであることを示すために、 短いオプションの最初の文字を `-'  または  `+'
       にすることができる。 「書式」 セクションの最初の呼び出し形式が使われた場合、これは無視され
       る。 しかし、環境変数 POSIXLY_CORRECT が指定されているかどうかは調べられる。

       最初の文字が `+' の場合、または環境変数 POSIXLY_CORRECT が設定されている場合、オプションで
       はない最初のパラメータ (つまり、 `-' で始まっていないパラメータ) が オプション引き数でない
       と分かった時点で解析はストップする。  それ以降の全てのパラメータは、オプションではないパラ
       メータとして解釈される。

       最初の文字が `-' の場合、オプションではない引き数は見つかった箇所で出力される。 通常の操作
       では、 `--' パラメータが生成された後で、最後にまとめて出力される。 この場合でも `--'  パラ
       メータは生成されるが、 通常このモードでは最後のパラメータになる点に注意すること。

互換性

       このバージョンの getopt(1) は、出来るだけ他のバージョンと互換性があるように書かれた。 通常
       は他のバージョンを修正することなく、 このバージョンに置き換えることができる。 更に、いくつ
       かの利点がある。

       getopt の最初のパラメータの最初の文字が `-' でない場合、getopt は互換モードになる。 最初の
       パラメータは短いオプションの文字列として解釈され、 他の全ての引き数が解析される。 この場合
       でも、環境変数  POSIXLY_CORRECT  が設定されていない限り、パラメータの並べ替えを行う  (つま
       り、オプションではない全てのパラメータが最後に出力される)。

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

       互換モードでは、短いオプション文字列の最初に付く `-' と `+' は無視される。

リターンコード

       解析に成功した場合、 getopt はエラーコード 0 を返す。 getopt(3)  がエラーを返した場合は  1
       を返す。 パラメータが理解できなかった場合は 2 を返す。 メモリが足りない (out-of-memory) と
       いった内部エラーの場合は 3 を返す。 -T オプションを付けて呼び出された場合は 4 を返す。

       (ba)sh と (t)csh での使用例のスクリプトは、 getopt(1) ディストリビューションで提供されてい
       る。  これらはオプションとして /usr/local/lib/getopt または /usr/lib/getopt にインストール
       されている。

環境変数

       POSIXLY_CORRECT
              この環境変数は getopt(3) ルーチンで調べられる。  これが設定されている場合、パラメー
              タがオプションまたは  オプション引き数でないと分かった時点で解析は停止する。 それ以
              降の全てのパラメータは、 `-' で始まっているかどうかに関係なく、  オプションではない
              パラメータとして解釈される。

       GETOPT_COMPATIBLE
              getopt に対して強制的に 「書式」 セクションの最初の呼び出し形式を使わせる。

バグ

       getopt(3) は、引き数を取っても取らなくてもよい長いオプションを解析できる (ただし、短いオプ
       ションの場合は解析できない)。  この   getopt(1)   は、オプション引き数が指定されていない場
       合、それが存在しないものとして扱う。

       短いオプション変数を全く使いたくない場合、  書式は全く直感的でないものになる (明示的に空の
       文字列に設定する必要がある)。

著者

       Frodo Looijaard <frodol@dds.nl>

関連項目

       getopt(3), bash(1), tcsh(1).