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)