3947840b05
Interpretation of a chunk in cut.1 was helped by: Yoshihiko Sarumaru <mistral@imasy.or.jp>, hrs
136 lines
3.4 KiB
Groff
136 lines
3.4 KiB
Groff
.\" %FreeBSD: src/usr.bin/getopt/getopt.1,v 1.19 2004/07/07 17:39:16 ru Exp %
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.Dd April 3, 1999
|
|
.Dt GETOPT 1
|
|
.Os
|
|
.Sh 名称
|
|
.Nm getopt
|
|
.Nd コマンドラインオプションの解釈を行う
|
|
.Sh 書式
|
|
.Nm args=\`getopt Ar optstring $*\`
|
|
; errcode=$?; set \-\- $args
|
|
.Sh 解説
|
|
.Nm
|
|
ユーティリティは、
|
|
シェルプロシージャによって簡単に解釈できるようにコマンドライン上の
|
|
オプションを切り分けます。そして、正しいオプションであるかを確かめます。
|
|
.Ar optstring
|
|
は、認識されるオプション文字の文字列です (
|
|
.Xr getopt 3
|
|
を参照)。
|
|
オプション文字のあとにコロン (``:'') がある場合、そのオプションは、
|
|
(空白文字で区切られているかもしれない) 引数を持つことになります。
|
|
特別なオプション
|
|
.Ql \-\-
|
|
は、オプションの終りを区別するために使われます。
|
|
.Nm
|
|
ユーティリティは、オプションの最後に引数として
|
|
.Ql \-\-
|
|
を配置します。または、それが陽に使われた時はそれを終りと認識します。
|
|
シェル変数
|
|
(\fB$1 $2\fR ...) は、個々のオプションが
|
|
.Ql \-
|
|
に続くように再設定されます。そして、それ自身をシェル変数にします。
|
|
各オプション引数は、同様にそれ用のシェル変数に入れられます。
|
|
.Sh 使用例
|
|
以下のコードの断片は、
|
|
引数無しの
|
|
.Fl a,
|
|
.Fl b
|
|
オプションと、
|
|
引数ありの
|
|
.Fl o
|
|
オプションを取ろうとしているコマンドのために、どのようにして
|
|
引数を処理するのかを示しています。
|
|
.Pp
|
|
.Bd -literal -offset indent
|
|
args=\`getopt abo: $*\`
|
|
# \`getopt abo: "$@"\` を使ってはなりません。
|
|
# 以下の set コマンドとは異ったように、引数を解釈してしまうためです。
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo 'Usage: ...'
|
|
exit 2
|
|
fi
|
|
set \-\- $args
|
|
# set コマンドを、バッククォートした getopt と共に、直接使用できません。
|
|
# getopt の終了コードが set のもので隠されてしまうからです。
|
|
# set の終了コードは 0 と定義されています。
|
|
for i
|
|
do
|
|
case "$i"
|
|
in
|
|
\-a|\-b)
|
|
echo flag $i set; sflags="${i#-}$sflags";
|
|
shift;;
|
|
\-o)
|
|
echo oarg is "'"$2"'"; oarg="$2"; shift;
|
|
shift;;
|
|
\-\-)
|
|
shift; break;;
|
|
esac
|
|
done
|
|
echo single-char flags: "'"$sflags"'"
|
|
echo oarg is "'"$oarg"'"
|
|
.Ed
|
|
.Pp
|
|
このコードは、以下の (コマンド指定の) 例のどれでも同じように
|
|
受け入れます。
|
|
.\"(訳注)「コマンド指定の」は、訳者が勝手に挿入している。
|
|
.\" 2.2.1R 対象(1997/04/27) Takeshi MUTOH <mutoh@info.nara-k.ac.jp>
|
|
.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
|
|
.Pp
|
|
.Ed
|
|
.Sh 関連項目
|
|
.Xr getopts 1 ,
|
|
.Xr sh 1 ,
|
|
.Xr getopt 3
|
|
.Sh 診断
|
|
.Nm
|
|
ユーティリティは、
|
|
.Ar optstring
|
|
中に含まれていないオプション文字に出会った時に、
|
|
標準エラー出力にエラーメッセージを表示し、0 より大きな状態で終了します。
|
|
.Sh 歴史
|
|
Bell Labs のマニュアルを元に、
|
|
.An Henry Spencer
|
|
が書きました。
|
|
振舞いは、Bell Labs 版と同じであると信じています。
|
|
使用例は
|
|
.Fx
|
|
バージョン 3.2 と 4.0 で変更しました。
|
|
.Sh バグ
|
|
.Xr getopt 3
|
|
が持っているバグは、そのまま持っています。
|
|
.Pp
|
|
空白文字やシェルのメタキャラクタを含んだ引数は、一般に元のまま
|
|
残りません。
|
|
これは直すのは簡単に思われますが、そうではありません。
|
|
.Nm
|
|
や本マニュアルの使用例を直そうとする人は、
|
|
.Fx
|
|
中のこのファイルの履歴を確認すべきです。
|
|
.Pp
|
|
不正なオプションに対するエラーメッセージは、
|
|
.Nm
|
|
を実行するシェルプロシージャから返すのではなく、
|
|
.Nm
|
|
から返されます。
|
|
これも直すのは困難です。
|
|
.Pp
|
|
シェルオプションの値を分離すること無く、引数を指定するための
|
|
.Nm set
|
|
コマンドを使うためのとっても良い方法は、シェルのバージョンを
|
|
変えることです。
|
|
.Pp
|
|
引数を部分的に正しく解釈するために、
|
|
各シェルスクリプトは
|
|
(前記使用例のような) 複雑なコードを持つ必要があります。
|
|
より良い getopt 的ツールは、複雑な部分の大半をツールの中に移動し、
|
|
クライアントのシェルスクリプトを単純にするものでしょう。
|