Re: Conditionals in BASH

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wednesday, Apr 9th 2008 at 14:43 -0000, quoth Rick Stevens:

=>Matthew Saltzman wrote:
=>> The conditionals && and || in bash are short-circuit, so that once a
=>> term is evaluated that determines the success or failure of the entire
=>> expression, evaluation of the remaining alternatives is skipped.
=>> 
=>> In a test expression (enclosed in [ ... ]), are the conditionals -a and
=>> -o also short-circuit?  The O'Reilly BASH book seems to suggest that
=>> they are not, but the description seems to me to be ambiguous.
=>
=>To my knowledge, all conditionals are evaluated left-to-right.  As
=>soon as one comparison fails, there is no need to evaluate the remainder
=>as the true-false condition has been met and the test is aborted with
=>a "false" result.  The only time the right-most comparison (or top level
=>comparison if nested) is evaluated is if all other comparisons are
=>true.

Sheesh! We *could* actually test test to see how test tests. It turns out 
that the builtin test function (which can be written using [ -a -o ] does 
*not* short circuit. The keyword [[ && || ]] construct does.

Enjoy:


#! /bin/bash

t1()
{
    echo t1
    echo t1 1>&2
}

f1()
{
   echo ''
   echo 'f1 nada' 1>&2
}
echo
echo 'and test'
[ "$(f1)" -a "$(t1)" ] && echo ctrue
[[ "$(f1)" && "$(t1)" ]] && echo ctrue
echo
echo 'or test'
[ "$(t1)" -o "$(f1)" ] && echo ctrue
[[ "$(t1)" || "$(f1)" ]] && echo ctrue

-- 
Time flies like the wind. Fruit flies like a banana. Stranger things have  .0.
happened but none stranger than this. Does your driver's license say Organ ..0
Donor?Black holes are where God divided by zero. Listen to me! We are all- 000
individuals! What if this weren't a hypothetical question?
steveo at syslang.net


[Index of Archives]     [Current Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]     [Fedora Docs]

  Powered by Linux