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)