4

My code below doesn't work:

stringZ="    "

if [[ "$stringZ" == ^[[:blank:]][[:blank:]]*$ ]];then
  echo  string is  blank
else
  echo string is not blank
fi 

Result:

string is not blank   # wrong

How can I test this?

1
  • I think I asked this before in 2013 :-)
    – munish
    Jun 23 '15 at 5:36
10

No need for bash specific code:

case $string in
  (*[![:blank:]]*) echo "string is not blank";;
  ("") echo "string is empty";;
  (*) echo "string is blank"
esac
5

From man bash:

An additional binary operator, =~, is available, with the same precedence as == and !=. When it is used, the string to the right of the operator is considered an extended regular expression and matched accordingly (as in regex(3)).

So the regular expression matching operator should be =~:

if [[ "$stringZ" =~ ^[[:blank:]][[:blank:]]*$ ]];then
  echo  string is  blank
else
  echo string is not blank
fi

You can reduce the verbosity of the regular expression by using + quantifier (meaning previous entity 1 or more times):

if [[ "$stringZ" =~ ^[[:blank:]]+$ ]]; then

Not the answer you're looking for? Browse other questions tagged or ask your own question.