getopt(1)


getopt -- コマンドオプションの構文解析

形式

set -- `getopt optstring $*`

機能説明

getopts(1) コマンドは、getopt に代わるものです。詳細については、後の「注意」の項を参照してください。

getopt は、コマンド行のオプションを分割して、シェル手続きによる解析を容易にし、オプションの妥当性を検査します。getopt は、LC_CTYPE 環境変数で指定されたロケール(environ(5)LANG 参照)に従って、optstring に指定された引き数のサプルメンタリコードセット文字を認識します。

optstring は、認識されたオプション文字の文字列です。getopt(3C) を参照してください。文字の次にコロンがついている場合、そのオプションは引き数を持ちますが、この引き数は、空白スペースで区切っても区切らなくてもかまいません。特殊オプション -- は、オプションの終わりを示すために使用されます。これを明示的に使用する場合、getopt はそれを認識します。そうでない場合、getopt がそれを作成します。いずれの場合にも、getopt は -- をオプションの終わりに置きます。シェルの位置パラメータ($1 $2 . . . )はリセットされ、各オプションの前に - をつけて各オプションが個別の位置パラメータに入るようにされます。また、各オプション引き数も、個別の位置パラメータに解析されます。

ファイル

/usr/lib/locale/locale/LC_MESSAGES/uxcore
言語特有のメッセージファイル(environ(5)LANG 参照)

診断

getopt は、optstring に含まれないオプション文字に出会うと、標準エラー出力にエラーメッセージを出力します。

使用法

オプションを再スキャンするときは、OPTIND を 1 にリセットしてください。

getopt は、コマンドの構文規格(intro(1) 参照)の規則 8、空白スペースおよび引用符で区切られたオプションの次にあるオプション引き数グループを許可するというルールの一部をサポートしません。例えば、下記のコマンドは正しく処理されません。

cmd -a -b -o "xxx z yy" file

この問題の対策として、getopt の代わりに getopts コマンドを使用してください。

オプション引き数をとるオプションの後に、optstring にリストされているオプションと同じ値が続く場合(上記の「使用例」の項を参考にし、コマンド行 cmd -o -a file を使用します)、getopt-a を常に -o に対するオプション引き数として扱い、-a をオプションとしては認識しません。この場合、使用例にある for ループは、file 引き数をとばしてシフトします。

使用例

下記のコードの一部は、オプション a または b、および引き数を1つ必要とするオプション o をとることができるコマンドの引き数を、どのように処理するかを示しています。
 
   set -- `getopt abo: $ASTERISK OPERATOR` 
   if [$? != 0] 
   then 
   	echo $USAGE 
   	exit 2 
   fi 
   for i in $ASTERISK OPERATOR 
   do 
   	case $i in 
   	-a | -b)	FLAG=$i; shift;; 
   	-o)	OARG=$2; shift 2;; 
   	--)	shift; break;; 
   	esac 
   done 

このコードは、下記のいずれかを等しいものとして受け入れます。

cmd -aoarg file file
cmd -a -o arg file file
cmd -oarg -a file file
cmd -a -oarg -- file file

注意

将来の方向

getopt は、次のメジャーリリースではサポートされません。このリリースでは、変換ツール getoptcvt が提供されています。getopts および getoptcvt に関する詳細については、getopts(1) を参照してください。

関連項目

getopt(3C), getopts(1), sh(1)
SCO UnixWare Forum Beta Release (BL12) -- September 1997
© 1997 The Santa Cruz Operation, Inc. All rights reserved.