---
name: "plan9-getflags"
section: "1"
platform: "linux"
package: "9base"
version: "1:6-1"
release: "Debian 6.0 (Squeeze)"
platforms: ["linux"]
url: "https://new.carta.tech/plan9-getflags"
---

# plan9-getflags(1)

command-line parsing for shell scripts

## NAME

getflags, usage - command-line parsing for shell scripts

## SYNOPSIS

**getflags $\***

**usage \[ progname \]**

## DESCRIPTION

*Getflags* parses the options in its command-line arguments according to the environment variable **$flagfmt**. This variable should be a list of comma-separated options. Each option can be a single letter, indicating that it does not take arguments, or a letter followed by the space-separated names of its arguments. *Getflags* prints an  [*rc*(1)](/rc/1.md) script on standard output which initializes the environment variable **$flag***x* for every option mentioned in  **$flagfmt**. If the option is not present on the command-line, the script sets that option's flag variable to an empty list. Otherwise, the script sets that option's flag variable with a list containing the option's arguments or,  if the option takes no arguments, with the string **1**. The script also sets the variable **$\*** to the list of arguments following the options. The final line in the script sets the **$status** variable, to the empty string on success and to the string **usage** when there is an error parsing the command line.

*Usage* prints a usage message to standard error. It creates the message using **$flagfmt**, as described above, **$args**, which should contain the string to be printed explaining non-option arguments, and **$0**, the program name (see [*rc*(1)](/rc/1.md)). If run under  [*sh*(1)](/sh/1.md), which does not set **$0**, the program name must be given explicitly on the command line.

## EXAMPLE

Parse the arguments for *leak*(1):

-

  ```
  flagfmt='b,s,f binary,r res,x width'
  args='name | pid list'
  if(! ifs=() eval `{getflags $*} || ~ $#* 0){
  	usage
  	exit usage
  }
  ```

## SOURCE

**/src/cmd/getflags.c**\
 **/src/cmd/usage.c**

## SEE ALSO

*arg*(3)
