Hello, consider this C program and its accompanying test script: #include <stdio.h> #include <getopt.h>
static void handle_args(int, char **); int main(int argc, char **argv) { handle_args(argc, argv); return 0; } #define REQUIRES_ARGUMENT 1 static void handle_args(int argc, char **argv) { const struct option long_options[] = { {"option_with_argument", REQUIRES_ARGUMENT, NULL, 0}, {NULL, 0, NULL, 0}, }; const char *short_options = ""; int c = 0; while((c = getopt_long(argc, argv, short_options, long_options, NULL)) != -1) { switch(c) { case ':': { printf("Missing parameter.\n"); break; } case '?': { printf("Unknown option.\n"); break; } } } } #!/bin/bash echo "Testing with parameter --option_with_argument=4711" ./getopt_long_problem --option_with_argument=4711 echo -e "\nTesting with parameter --option_with_argument" ./getopt_long_problem --option_with_argument echo -e "\nTesting with parameter --unknown_option" ./getopt_long_problem --unknown_option The output when I run the script is: $ ./probtest.sh Testing with parameter --option_with_argument=4711 Testing with parameter --option_with_argument getopt_long_problem: option requires an argument -- option_with_argument Unknown option. Testing with parameter --unknown_option getopt_long_problem: unknown option -- unknown_option Unknown option. As you can see, getopt_long() returns '?' for the case where the option requires arguments and none was supplied, I was under the impression that it should return ':' for that case and '?' for unknown options (it prints the correct diagnostic, though). Is this a bug in the implementation of getopt_long() that Cygwin comes with or are the docs I have read simply not applicable to Cygwins implementation? / Mikael -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/