Testando uma string contendo apenas espaços (tabs, ou “”)? [duplicado]

4

Meu código abaixo não funciona:

stringZ="    "

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

Resultado:

string is not blank   # wrong

Como posso testar isso?

    
por munish 19.03.2013 / 14:42

2 respostas

10

Não é necessário codificar bash :

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

De 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)).

Portanto, o operador de correspondência de expressões regulares deve ser =~ :

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

Você pode reduzir a verbosidade da expressão regular usando + quantifier (ou seja, entidade anterior 1 ou mais vezes):

if [[ "$stringZ" =~ ^[[:blank:]]+$ ]]; then
    
por 19.03.2013 / 17:25