(Dave Thomasから教えをいただいた)echoプログラムでgetopt関数を使えないのはなぜか?
echo_example.c
#include <stdio.h> #include <unistd.h> int main(int argc, char *argv[]) { int nflag = 0; int c; while ((c = getopt(argc, argv, "+n")) != -1) { if (c == 'n') nflag = 1; } argv+=optind; while (*argv) { (void)printf("%s", *argv); if (*++argv) putchar(' '); } if (!nflag) putchar('\n'); exit(0); }
echoのオプションはnだけだけど、それ以外が指定された場合
エラーとするのではなく、文字列として出力される。
例えば echo -a は正しく処理され、-aと出力される。
つまり、getoptを利用しよとすると、これがダメなわけですね。
$ echo -a -a $ ./echo_example -a ./echo_example: illegal option -- a
$ echo -n $ echo -n aaa aaa% $ echo aaa aaa $ ./echo_example -n $ ./echo_example -n aaa aaa% $ ./echo_example aaa aaa