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.

Reply via email to