Difference between parentheses and braces in terminal?

( du /etc; du /var; ) > tmp.txt

{ du /etc; du /var; } > tmp.txt

Is there a difference between the () and {}?

The output of tmp.txt seems exactly the same, and I was wondering whether i’m missing something here.

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Parentheses cause the commands to be run in a subshell.

Braces cause the commands to be grouped together but not in a subshell.

Given that your example does not use side-effects, there is no real difference between both. If there were side-effects, e.g. setting or modifying shell variables, there is a difference as such side-effects applied to a sub-shell will be forgotten when this sub-shell ends.

If you however take a closer look and compare the behavior of different shell implementations, it becomes confusing:

The Bourne Shell e.g. runs grouped commands in a subshell in case there is an I/O redirection and ksh93 avoids subshells by implementing virtual subshell behavior that is done by creating a temporary copy of new parameters. Whether this is always 100% correct is not known, ksh93 Version M 1993-12-28 s+ from 2009 e.g. implements $(…) incorrectly and $(alias a=b) affects the main shell.

So in general: if you are interested in specific aspects, be careful and check your shell for it’s actual behavior.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x