i-bash/tests/cond.tests
2009-09-12 16:46:51 +00:00

142 lines
2.6 KiB
Text
Executable file

#
# the test/[ code is tested elsewhere, and the [[...]] just uses the same
# code. this tests the special features of [[...]]
#
TDIR=/usr/homes/chet
# this one is straight out of the ksh88 book
[[ foo > bar && $PWD -ef . ]]
echo returns: $?
# [[ x ]] is equivalent to [[ -n x ]]
[[ x ]]
echo returns: $?
# [[ ! x ]] is equivalent to [[ ! -n x ]]
[[ ! x ]]
echo returns: $?
# ! binds tighter than test/[ -- it binds to a term, not an expression
[[ ! x || x ]]
echo returns: $?
# unset variables don't need to be quoted
[[ -n $UNSET ]]
echo returns: $?
[[ -z $UNSET ]]
echo returns: $?
# the ==/= and != operators do pattern matching
[[ $TDIR == /usr/homes/* ]]
echo returns: $?
# ...but you can quote any part of the pattern to have it matched as a string
[[ $TDIR == /usr/homes/\* ]]
echo returns: $?
[[ $TDIR == '/usr/homes/*' ]]
echo returns: $?
# if the first part of && fails, the second is not executed
[[ -n $UNSET && $UNSET == foo ]]
echo returns: $?
[[ -z $UNSET && $UNSET == foo ]]
echo returns: $?
# if the first part of || succeeds, the second is not executed
[[ -z $UNSET || -d $PWD ]]
echo returns: $?
# if the rhs were executed, it would be an error
[[ -n $TDIR || $HOME -ef ${H*} ]]
echo returns: $?
[[ -n $TDIR && -z $UNSET || $HOME -ef ${H*} ]]
echo returns: $?
# && has a higher parsing precedence than ||
[[ -n $TDIR && -n $UNSET || $TDIR -ef . ]]
echo returns: $?
# ...but expressions in parentheses may be used to override precedence rules
[[ -n $TDIR || -n $UNSET && $PWD -ef xyz ]]
echo returns: $?
[[ ( -n $TDIR || -n $UNSET ) && $PWD -ef xyz ]]
echo returns: $?
# some arithmetic tests for completeness -- see what happens with missing
# operands, bad expressions, makes sure arguments are evaluated as
# arithmetic expressions, etc.
unset IVAR A
[[ 7 -gt $IVAR ]]
echo returns: $?
[[ $IVAR -gt 7 ]]
echo returns: $?
IVAR=4
[[ $IVAR -gt 7 ]]
echo returns: $?
[[ 7 -eq 4+3 ]]
echo returns: $?
[[ 7 -eq 4+ ]]
echo returns: $?
IVAR=4+3
[[ $IVAR -eq 7 ]]
echo returns: $?
A=7
[[ $IVAR -eq A ]]
echo returns: $?
unset IVAR A
# more pattern matching tests
[[ $filename == *.c ]]
echo returns: $?
filename=patmatch.c
[[ $filename == *.c ]]
echo returns: $?
# the extended globbing features may be used when matching patterns
shopt -s extglob
arg=-7
[[ $arg == -+([0-9]) ]]
echo returns: $?
arg=-H
[[ $arg == -+([0-9]) ]]
echo returns: $?
arg=+4
[[ $arg == ++([0-9]) ]]
echo returns: $?
# make sure the null string is never matched if the string is not null
STR=file.c
PAT=
if [[ $STR = $PAT ]]; then
echo oops
fi
# but that if the string is null, a null pattern is matched correctly
STR=
PAT=
if [[ $STR = $PAT ]]; then
echo ok
fi