?? cond.tests
字號:
## 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: $?# parenthesized terms didn't work right until post-2.04[[ a ]]echo returns: $?[[ (a) ]]echo returns: $?[[ -n a ]]echo returns: $?[[ (-n a) ]]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 patternsshopt -s extglobarg=-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 nullSTR=file.cPAT=if [[ $STR = $PAT ]]; then echo oopsfi# but that if the string is null, a null pattern is matched correctlySTR=PAT=if [[ $STR = $PAT ]]; then echo okfi# test the regular expression conditional operator[[ jbig2dec-0.9-i586-001.tgz =~ ([^-]+)-([^-]+)-([^-]+)-0*([1-9][0-9]*)\.tgz ]]echo ${BASH_REMATCH[1]}# this shouldn't echo anything[[ jbig2dec-0.9-i586-001.tgz =~ \([^-]+\)-\([^-]+\)-\([^-]+\)-0*\([1-9][0-9]*\)\.tgz ]]echo ${BASH_REMATCH[1]}LDD_BASH=" linux-gate.so.1 => (0xffffe000) libreadline.so.5 => /lib/libreadline.so.5 (0xb7f91000) libhistory.so.5 => /lib/libhistory.so.5 (0xb7f8a000) libncurses.so.5 => /lib/libncurses.so.5 (0xb7f55000) libdl.so.2 => /lib/libdl.so.2 (0xb7f51000) libc.so.6 => /lib/libc.so.6 (0xb7e34000) /lib/ld-linux.so.2 (0xb7fd0000)"[[ "$LDD_BASH" =~ "libc" ]] && echo "found 1" echo ${BASH_REMATCH[@]}[[ "$LDD_BASH" =~ libc ]] && echo "found 2" echo ${BASH_REMATCH[@]}# bug in all versions up to and including bash-2.05bif [[ "123abc" == *?(a)bc ]]; then echo ok 42; else echo bad 42; fiif [[ "123abc" == *?(a)bc ]]; then echo ok 43; else echo bad 43; fi${THIS_SH} ./cond-regexp.sub
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -