Go to main content

マニュアルページ セクション 1: ユーザーコマンド

印刷ビューの終了

更新: 2022年7月27日
 
 

getopt(1)

名前

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

形式

set -– ` getopt optstring $ * `

説明

getopts コマンドが、 getopt に取って代わります。詳細は、 以下の「注意事項」の項を参照してください。

getopt は、シェルプロシージャによる解析を容易にするために コマンド行のオプションを分解し、 各オプションが正当であるかどうかの確認に使用します。optstring は、 認識されるオプションの文字列です。getopt(3C) を参照してください。オプション文字のあとにコロン (:) が付いている場合は、 そのオプションに引数があるとみなされます。コロンと引数の間は、 スペースで区切られていても、区切られていなくてもかまいません。特殊なオプション – – は、 オプションの終わりを表すのに使用されます。 このオプションを明示的に使用すると getopt はこれを認識し、 省略された場合には getopt がこれを生成します。いずれの場合でも、 getopt はオプションの終わりにこの特殊オプションを付けます。シェルの位置パラメータ ($1 $2 . . . ) が再設定されて、各オプションの前に - が付き、各オプションはそのオプションの位置パラメータに入ります。各オプション引数も、同様にその引数の位置パラメータに入るように解析されます。

使用例 1 コマンド引数の処理

次の部分コードに、 オプション –a または –b 、および引数の必要なオプション –o を使用するコマンドについて、 引数の処理例を示します。

set -- `getopt abo: $*`
if [ $? != 0 ]
then
           echo $USAGE
           exit 2
fi
for i in $*
do
           case $i in
           -a | -b)     FLAG=$i; shift;;
           -o)           OARG=$2; shift 2;;
           --)           shift; break;;
           esac
done

このコードは、 次のコマンドすべてを同一内容として受け入れます。

cmd -aoarg filename1 filename2
cmd -a -o arg filename1 filename2
cmd -oarg -a filename1 filename2
cmd -a -oarg -- filename1 filename2

属性

属性についての詳細は、マニュアルページの attributes(7) を参照してください。

属性タイプ
属性値
使用条件
system/core-os
CSI
有効

関連項目

getoptcvt(1), getopts(1), Intro(1), sh(1), shell_builtins(1), getopt(3C), attributes(7)

診断

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

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

オプションを再走査する際は、 optind1 を再設定してください。

getopt は、オプションに続くオプション引数を、スペースおよび引用符で区切って指定できるというコマンド構文標準規則 8 の一部をサポートしません (Intro(1) 参照)。たとえば、

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

は、正しく処理されません。この不完全性を正すためには、 getopt コマンドの代わりに getopts コマンドを使用してください。

オプション引数を持つあるオプションに、optstring で示されているオプションの 1 つと同じ値が続いている場合 (前述の「使用例」の項を参照。ただし、次のコマンド行を使用する場合)、

cmd -o -a filename

getopt は、常に –a–o のオプション引数として扱うので、 a はオプションとして認識されません。この場合、 この例の for ループは、filename 引数を通り越してシフトします。