getsubopt - Linux


getsubopt extracts and parses a specific option and its value from a long options descriptor template. It provides flexibility and control in processing command-line arguments, typically used in user-defined scripts and advanced command-line applications.


getsubopt(arg_index, long_options, short_options, env_val, ret_val)


  • arg_index (required): Index of the getopt() argument on which the operation should be performed.
  • long_options (required): Pointer to a list of long option names (null-terminated).
  • short_options (required): Pointer to a string containing the short option characters (null-terminated).
  • env_val (required): Pointer to a string where the parsed value of the option will be stored.
  • ret_val (returned): Index of the matched option in long_options or -1 if no match is found.


Simple Example:

Extract the value of the -n or --name option from a command line:

getsubopt(argc, argv, "name:", "-n:", &name, &option_index);
printf("Name: %s\n", name);

Complex Example:

Parse multiple options, including both short and long options, and their values:

int argc;
char **argv;
char *name, *age;
int option_index;

while (getsubopt(argc, argv, "n:a:", "name:", "age:", &name, &option_index) != -1) {
  switch (option_index) {
    case 0:
      printf("Name: %s\n", name);
    case 1:
      printf("Age: %s\n", name);
      // Handle invalid option or missing value

Common Issues

  • Invalid option or missing value: Ensure the specified option is valid and in the correct format. Check if the value is present and non-empty if it’s expected.
  • Infinite loop: Make sure to increment arg_index after each getsubopt() call or use the noarg option to indicate that an option doesn’t require a value.


getsubopt is commonly used with getopt() to enhance flexibility in command-line argument parsing. It allows for the definition of custom long option names and enables more advanced argument handling scenarios.

Related Commands

  • getopt(): Standard library function for parsing command-line arguments.
  • getopt_long(): Extended version of getopt() supporting long options.
  • getopts(): Bourne shell built-in for parsing arguments.