Miguel Ángel wrote: > Evaluating expressions like: > [ true -a false ] ; echo $? > always returns 0 (true), doesn't mind if I change true for false or > viceversa.
In the case of the test operator (aka '[ expr ]') use of "true" and "false" as you have done are strings and not boolean expressions and not commands. Saying '[ true -a false ]' is asking if "true" is a string non-zero in length and if "false" is a string non-zero in length. Both are true and therefore the expression is true. This would be the same as the following. These are the same. [ foo -a bar ] [ -n foo -a -n bar ] This is defined by standard by the number of arguments. http://www.opengroup.org/onlinepubs/009695399/utilities/test.html 1 argument: Exit true (0) if $1 is not null; otherwise, exit false. Therefore all of the following must be true because they have one argument and are not null. [ foo ] [ false ] [ FALSE ] This next would be false. [ "" ] > any expression wich involves the true or false commands throws wrong > results. > Examples: > > [ "a" = "a" -a false ] ; echo $? > > gives 0 (true) In order to use the true and false commands as booleans they must be called in the position of a command. true && false ; echo $? [ "a" = "a" ] && false ; echo $? istrue=true if $istrue; then echo istrue; else echo isnottrue; fi istrue=false if $istrue; then echo istrue; else echo isnottrue; fi Bob _______________________________________________ Bug-bash mailing list Bug-bash@gnu.org http://lists.gnu.org/mailman/listinfo/bug-bash