Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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?

share|improve this question

2 Answers 2

up vote 7 down vote accepted

No need for bash specific code:

case $string in
  (*[^[:blank:]]*) echo "string is not blank";;
  ("") echo "string is empty";;
  (*) echo "string is blank"
esac
share|improve this answer

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
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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