On Sunday, October 14, 2012 11:46:17 AM Wladimir Sidorenko wrote:
> To my mind '!' looks pretty much like a unary operator and '|' like a binary 
one.

This isn't as confusing as the associativity and nesting problem.

 $ ( ! time ! : | :; echo $? "( ${PIPESTATUS[@]} )" ) 2>/dev/null
0 ( 0 0 )
 $ ( ! ! : | :; echo $? "( ${PIPESTATUS[@]} )" )
0 ( 0 0 )
 $ ( ! { ! :; } | :; echo $? "( ${PIPESTATUS[@]} )" )
1 ( 1 0 )
 $ ( ! { ! : | : ; } | :; echo $? "( ${PIPESTATUS[@]} )" )
1 ( 1 0 )

I still don't completely understand how all of the above can be pipelines of 
two elements if eacg bang denotes the begnning of a new pipeline. You would 
expect to have at least one of these cases showing up as a one element 
pipeline containing multi-element pipelines especially with "! !".

Both ksh and mksh additionally allow things like:

 $ mksh -c ': | ! : | :; echo $? "( ${PIPESTATUS[@]} )"'
1 ( 0 1 )
 $ mksh -c ': | ! { ! : | :; }; echo $? "( ${PIPESTATUS[@]} )"'
0 ( 0 0 )

I don't believe this is valid syntax, but also end up being pipelines of two 
elements. Bash, dash, zsh, etc don't accept this.
-- 
Dan Douglas

Reply via email to