字符串比较使用带引号的字符串==之间的运算符。该运营商否定了比较。!=
if [[ "$string1" == "$string2" ]]; then echo "\$string1 and \$string2 are identical" fi if [[ "$string1" != "$string2" ]]; then echo "\$string1 and \$string2 are not identical" fi
如果右侧没有加引号,$string1则匹配的是通配符模式。
string='abc' pattern1='a*' pattern2='x*' if [[ "$string" == $pattern1 ]]; then # the test is true echo "The string $string matches the pattern $pattern" fi if [[ "$string" != $pattern2 ]]; then # the test is false echo "The string $string does not match the pattern $pattern" fi
在<和>运算符比较在词典顺序的字符串(不存在较少的或相等或更大,或相等的运营商字符串)。
空字符串有一元测试。
if [[ -n "$string" ]]; then echo "$string is non-empty" fi if [[ -z "${string// }" ]]; then echo "$string is empty or contains only spaces" fi if [[ -z "$string" ]]; then echo "$string is empty" fi
在上面,-z检查可能意味着$string未设置,或者设置为空字符串。要区分空白和未设置,请使用:
if [[ -n "${string+x}" ]]; then echo "$string is set, possibly to the empty string" fi if [[ -n "${string-x}" ]]; then echo "$string is either unset or set to a non-empty string" fi if [[ -z "${string+x}" ]]; then echo "$string is unset" fi if [[ -z "${string-x}" ]]; then echo "$string is set to an empty string" fi
在哪里x是任意的。或以表格形式:
+-------+-------+-----------+ $string is: | unset | empty | non-empty | +-----------------------+-------+-------+-----------+ | [[ -z ${string} ]] | true | true | false | | [[ -z ${string+x} ]] | true | false | false | | [[ -z ${string-x} ]] | false | true | false | | [[ -n ${string} ]] | false | false | true | | [[ -n ${string+x} ]] | false | true | true | | [[ -n ${string-x} ]] | true | false | true | +-----------------------+-------+-------+-----------+
或者,可以在case语句中检查状态:
case ${var+x$var} in (x) echo empty;; ("") echo unset;; (x*[![:blank:]]*) echo non-blank;; (*) echo blank esac
[:blank:]语言环境特定的水平间距字符(制表符,空格等)在哪里。