.Dd June 21, 1993 .\" jpman %Id: getopt.1,v 1.3 1997/06/19 14:12:53 take Stab % .Dt GETOPT 1 .Os .Sh 名称 .Nm getopt .Nd コマンドラインオプションの解釈を行う .Sh 書式 .Nm set \-\- \`getopt Ar optstring $*\` .Sh 解説 .Nm getopt は、シェルプロシジャによって簡単に解釈できるようにコマンドライン上の オプションを切り分けます。そして、正しいオプションであるかを確かめます。 .Ar optstring は、認識されるオプション文字の文字列です ( .Xr getopt 3 を参照 )。 オプション文字のあとにコロン (``:'') がある場合、そのオプションは、 ( 空白文字で区切られているかもしれない ) 引数を持つことになります。 特別なオプション .Ql \-\- は、オプションの終りを区別するために使われます。 .Nm getopt は、オプションの最後に引数として .Ql \-\- を配置します。または、それが陽に使われた時はそれを終りと認識します。 シェル変数 (\fB$1 $2\fR ...) は、個々のオプションが .Ql \- に続くように再設定されます。そして、それ自身をシェル変数にします。 各オプション引数は、同様にそれ用のシェル変数に入れられます。 .Sh 使用例 以下のコードの断片は、 引数無しの .Fl a, .Fl b オプションと、 引数ありの .Fl o オプションを取ろうとしているコマンドのために、どのようにして 引数を処理するのかを示しています。 .Pp .Bd -literal -offset indent set \-\- \`getopt abo: $*\` if test $? != 0 then echo 'Usage: ...' exit 2 fi for i do case "$i" in \-a|\-b) flag=$i; shift;; \-o) oarg=$2; shift; shift;; \-\-) shift; break;; esac done .Ed .Pp このコードは、以下の ( コマンド指定の ) 例のどれでも同じように 受け入れます。 .\"(訳注)「コマンド指定の」は、訳者が勝手に挿入している。 .\" 2.2.1R 対象(1997/04/27) Takeshi MUTOH .Pp .Bd -literal -offset indent cmd \-aoarg file file cmd \-a \-o arg file file cmd \-oarg -a file file cmd \-a \-oarg \-\- file file .Ed .Sh 関連項目 .Xr sh 1 , .Xr getopt 3 .Sh 診断 .Nm getopt は、 .Ar optstring 中に含まれていないオプション文字に出会った時に、 標準エラー出力にエラーメッセージを表示します。 .Sh 歴史 ベル研究所マニュアルによると、 Henry Spencer によって書かれました。 振舞いは、ベル研究所版と同じであると信じています。 .Sh バグ .Xr getopt 3 が持っているバグは、そのまま持っています。 .Pp 空白文字やシェルのメタキャラクタを含んだ引数は、一般に元のまま 残りません。 これは直すのは簡単に思われますが、そうではありません。 .Pp 不正なオプションに対するエラーメッセージは、 .Nm getopt を実行するシェルプロシジャから返すのではなく、 .Nm getopt から返されます。 これも直すのは困難です。 .Pp シェルオプションの値を分離すること無く、引数を指定するための .Nm set コマンドを使うためのとっても良い方法は、シェルのバージョンを 変えることです。