On Wed, Jan 19, 2011 at 10:49:47AM +0000, Davide Brini wrote:
> In your second script, the "exit 0" part runs in a subshell, so "exit" exits
> that subshell (and I'm somewhat surprised that no semicolon is required after
> the closing bracket, but I may have missed something in the grammar).
He had parentheses (like this) not brackets. You don't need semicolons
to terminate commands inside parentheses. You *do* need them to terminate
commands inside curly braces.
(cd /foo && make) # subshell
foo || { echo "failure" >&2; exit 1; } # command grouping
Note that you also don't need a space between the opening ( and the
command, whereas you do need a space between { and the command. Otherwise,
the parser would treat {echo as a single word:
$ {echo failure}
bash: {echo: command not found
This is because ( is a metacharacter, but { is not.