Date: Fri, 29 Jun 2001 02:32:51 -0500 From: Mike Meyer <mwm@mired.org> To: Dave Tweten <tweten@nas.nasa.gov> Cc: questions@freebsd.org Subject: Re: Bourne Shell Syntax Wierdness Message-ID: <15164.12067.829448.734806@guru.mired.org> In-Reply-To: <98860201@toto.iv>
next in thread | previous in thread | raw e-mail | index | archive | help
Dave Tweten <tweten@nas.nasa.gov> types: > The sh man page says that the two operators "||" and "&&" have the > same precedence. It also says that "a || b" means "execute b if a > terminates abnormally" and "a && b" means "execute b if a terminates > normally." > > So I don't understand why "true || true && echo Oops!" prints "Oops!" The || and && operators are left associative, so that your example - which is ambiguous given only the information you provided - is parsed as "( true || true ) && echo Oops!". Since "( true || true )" always terminates normally, it should print "echo Oops!". > This is apparently not a bug in FreeBSD sh, because IRIX, IRIX64, and SunOS > Bourne/Korn shells work the same way, but it certainly runs counter to my > ability to read English and the contents of the man page. But it matches the way most people read expressions. The world would be a better place if we switched to an unambiguous system for mathematical expressions :-). > Incidently, "true || { true && echo Oops! }" prints nothing -- which > I would have expected with or without the "{}". That's what would happen if the operators were right associative instead of left associative - which would collide with most peoples expectations based on common mathematical usage. <mike -- Mike Meyer <mwm@mired.org> http://www.mired.org/home/mwm/ Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?15164.12067.829448.734806>