A maneira mais fácil de verificar se uma string contém apenas caracteres em um conjunto autorizado é testar a presença de caracteres não autorizados. Portanto, em vez de testar se a cadeia contém apenas espaços, teste se a cadeia contém algum caractere que não seja o espaço. No bash, ksh ou zsh:
if [[ $param = *[!\ ]* ]]; then
echo "\$param contains characters other than space"
else
echo "\$param consists of spaces only"
fi
"Consiste apenas em espaços" inclui o caso de uma variável vazia (ou não definida).
Você pode testar qualquer caractere de espaço em branco. Use [[ $param = *[^[:space:]]* ]]
para usar configurações de localidade ou qualquer lista explícita de caracteres de espaço em branco que você deseja testar, por exemplo, [[ $param = *[$' \t\n']* ]]
para testar espaço, tabulação ou nova linha.
Combinar uma string com um padrão com =
inside [[ … ]]
é uma extensão ksh (também presente no bash e no zsh). Em qualquer estilo Bourne / POSIX, você pode usar a case
construção para combinar uma sequência com um padrão. Observe que os padrões de shell padrão são usados !
para negar um conjunto de caracteres, e não ^
como na maioria das sintaxes de expressão regular.
case "$param" in
*[!\ ]*) echo "\$param contains characters other than space";;
*) echo "\$param consists of spaces only";;
esac
Para testar caracteres em branco, a $'…'
sintaxe é específica para ksh / bash / zsh; você pode inserir esses caracteres no seu script literalmente (observe que uma nova linha terá que estar entre aspas, pois a barra invertida + a nova linha se expandirá para nada) ou gerá-las, por exemplo
whitespace=$(printf '\n\t ')
case "$param" in
*[!$whitespace]*) echo "\$param contains non-whitespace characters";;
*) echo "\$param consists of whitespace only";;
esac
man test
:-z STRING - the length of STRING is zero
. Se você deseja remover todos os espaços$param
, use${param// /}