Grouping commands

{ <LIST>; }


The list <LIST> is simply executed in the current shell environment. The list must be terminated with a newline or semicolon. For parsing reasons, the curly braces must be separated from <LIST> by a semicolon and blanks if they're in the same line! 1)2)

This is known as a group command. The return status is the exit status (exit code) of the list.

The input and output filedescriptors are cumulative:

  echo "PASSWD follows"
  cat /etc/passwd
  echo "GROUPS follows"
  cat /etc/group
} >output.txt

This compound command also usually is the body of a function definition, though not the only compound command that's valid there:

print_help() {
  echo "Options:"
  echo "-h           This help text"
  echo "-f FILE      Use config file FILE"
  echo "-u USER      Run as user USER"

  try_catch() {
      { # Try-block:
          eval "$@"
      } ||
      { # Catch-block:
          echo "An error occurred"
          return -1

Actually any properly terminated compound command will work without extra separator (also in some other shells), example: { while sleep 1; do echo ZzZzzZ; done } is valid. But this is not documented, infact the documentation explicitly says that a semicolon or a newline must separate the enclosed list. – thanks geirha at Freenode
The main reason is the fact that in shell grammar, the curly braces are not control operators but reserved words – TheBonsai
This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information
You could leave a comment if you were logged in.
  • syntax/ccmd/grouping_plain.txt
  • Last modified: 2016/06/02 20:49
  • by samuelwn