wiki.bash-hackers.org/syntax/ccmd/grouping_plain.md
2023-04-15 23:23:49 +12:00

2.0 KiB

====== Grouping commands ======

===== Synopsis ===== <code>{ <LIST>; }</code>

<code> { <LIST> } </code>

===== Description =====

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! ((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 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: <code> { echo "PASSWD follows" cat /etc/passwd echo echo "GROUPS follows" cat /etc/group } >output.txt </code>

This compound command also usually is the body of a function definition, though not the only compound command that's valid there: <code> print_help() { echo "Options:" echo "-h This help text" echo "-f FILE Use config file FILE" echo "-u USER Run as user USER" } </code>

===== Examples ===== ==== A Try-Catch block ====

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

===== Portability considerations =====

===== See also =====