Le 03/05/2010 21:08, Kunszt Árpád a écrit :
>> http://mywiki.wooledge.org/BashPitfalls#cmd1_.26.26_cmd2_.7C.7C_cmd3
> I read it, thanks. I understand it now.
>
> I read man bash lots of times, but this behavior had escaped my
> attention. There isn't any word about cmd1 && cmd2 || cmd3 only the cmd1
> && cmd2 and cmd1 || cmd2 mentioned. I think lots of people, including
> myself, thought that && and || is an equivalent to the if ... then ...
> else statement.
Out of curiosity, what made you think that?
I find the following quite intuitive:
true && false || this_cmd_is_run
"true && false" is obviously equal to "false".
> So my bugreport is now against the documentation. :-)
This is already documented. Excerpts from the "List of Commands"
section:
*) "AND and OR lists are executed with left associativity"
Applied here:
cmdA && cmdB || cmdC <=> { cmdA && cmdB ; } || cmdC
*) "The return status of AND and OR lists is the exit status of the
last command executed in the list"
Applied here:
Whenever cmdB is run and fails, "{ cmdA && cmdB ; }" is
considered to have failed (and cmdC is run)