GNUgetopt()
を使用しているかどうか、使用している場合POSIXLY_CORRECT
は環境に が設定されているかどうかによって異なります。
古典的に (非 GNU を意味しますgetopt()
)、すべてのオプション引数は、オプション以外の (ファイル名) 引数の前になければなりません。これは、オプションではない引数が 4 つあることを意味します。
GNUgetopt()
があり、set がない場合POSIXLY_CORRECT
は、コマンド ラインの任意の場所でオプション引数が処理されます。その場合、-r
引数 value を持つ 1 つのオプションfoo
と、2 つの非オプション引数 (hello
およびbar
) があります。
Classicgetopt()
に を認識させる-r
には、最初の (オプションではない) 引数を必要とし、その後で呼び出しを行う必要がありますgetopt()
。
int main(int argc, char **argv)
{
char *cmd = argv[1];
int opt;
argv[1] = argv[0];
argv++;
argc--;
while ((opt = getopt(argv, argc, "r:")) != EOF)
{
switch (opt)
{
case 'r':
...capture optarg...
break;
default:
...report error....
break;
}
}
for (int i = optind; i < argc; i++)
process_non_option_argument(cmd, argv[i]);
return(0);
}
GNUgetopt
を有効にすると、GNU はオプション以外の引数を返すこともできます。それ以外の場合、bar
引数は常に非オプション引数として扱われます。