# User selections ## Synopsis select ; do done select in ; do done # alternative, historical and undocumented syntax select { } select in { } ## Description This compound command provides a kind of menu. The user is prompted with a *numbered list* of the given words, and is asked to input the index number of the word. If a word was selected, the variable `` is set to this word, and the [list](../../syntax/basicgrammar.md#lists) `` is executed. If no `in ` is given, then the positional parameters are taken as words (as if `in "$@"` was written). Regardless of the functionality, the *number* the user entered is saved in the variable `REPLY`. Bash knows an alternative syntax for the `select` command, enclosing the loop body in `{...}` instead of `do ... done`: select x in 1 2 3 { echo $x } This syntax is **not documented** and should not be used. I found the parser definitions for it in 1.x code, and in modern 4.x code. My guess is that it's there for compatiblity reasons. This syntax is not specified by POSIX(R). ## Examples ``` bash # select in ; do # # done # meaning e.g.: clear echo echo hit number key 1 2 or 3 then ENTER-key echo ENTER alone is an empty choice and will loop endlessly until Ctrl-C or Ctrl-D echo select OPTIONX in beer whiskey wine liquor ; do echo you ordered a $OPTIONX break # break avoids endless loop -- second line to be executed always done # place some if else fi business here # and explain how it makes sense that $OPTIONX is red but OPTIONX is black # even though both are variables ``` ## Portability considerations ## See also