Il modo semplice per verificare che una stringa contenga solo caratteri in un set autorizzato è verificare la presenza di caratteri non autorizzati. Pertanto, anziché verificare se la stringa contiene solo spazi, verifica se la stringa contiene caratteri diversi dallo spazio. In bash, ksh o zsh:
if [[ $param = *[!\ ]* ]]; then
echo "\$param contains characters other than space"
else
echo "\$param consists of spaces only"
fi
"Consiste solo di spazi" include il caso di una variabile vuota (o non impostata).
Potresti voler testare qualsiasi carattere di spazio bianco. Utilizzare [[ $param = *[^[:space:]]* ]]
per utilizzare le impostazioni locali o qualsiasi elenco esplicito di caratteri di spazi bianchi per cui si desidera verificare, ad esempio [[ $param = *[$' \t\n']* ]]
per verificare lo spazio, la scheda o la nuova riga.
La corrispondenza di una stringa con uno schema con =
inside [[ … ]]
è un'estensione ksh (presente anche in bash e zsh). In qualsiasi stile Bourne / POSIX, è possibile utilizzare il case
costrutto per abbinare una stringa a un modello. Si noti che i modelli di shell standard usano !
per negare un set di caratteri, piuttosto che ^
come nella maggior parte delle sintassi delle espressioni regolari.
case "$param" in
*[!\ ]*) echo "\$param contains characters other than space";;
*) echo "\$param consists of spaces only";;
esac
Per verificare i caratteri degli spazi bianchi, la $'…'
sintassi è specifica di ksh / bash / zsh; puoi inserire questi caratteri nel tuo script letteralmente (nota che una nuova riga dovrà essere racchiusa tra virgolette, poiché la barra rovesciata + la nuova riga non si espande nel nulla) o generarli, ad es.
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 vuoi rimuovere tutti gli spazi$param
, usa${param// /}