La manera fácil de verificar que una cadena solo contenga caracteres en un conjunto autorizado es probar la presencia de caracteres no autorizados. Por lo tanto, en lugar de probar si la cadena solo contiene espacios, pruebe si la cadena contiene algún carácter que no sea espacio. En bash, ksh o zsh:
if [[ $param = *[!\ ]* ]]; then
echo "\$param contains characters other than space"
else
echo "\$param consists of spaces only"
fi
“Consiste solo en espacios” incluye el caso de una variable vacía (o no establecida).
Es posible que desee probar cualquier carácter de espacio en blanco. Utilícelo [[ $param = *[^[:space:]]* ]]
para usar la configuración regional o cualquier lista explícita de caracteres de espacios en blanco que desee probar, por ejemplo, [[ $param = *[$' \t\n']* ]]
para probar el espacio, la pestaña o la nueva línea.
Hacer coincidir una cadena con un patrón con el =
interior [[ … ]]
es una extensión ksh (también presente en bash y zsh). En cualquier estilo Bourne / POSIX, puede usar la case
construcción para hacer coincidir una cadena con un patrón. Tenga en cuenta que los patrones de shell estándar se utilizan !
para negar un conjunto de caracteres, en lugar de ^
como en la mayoría de las sintaxis de expresiones regulares.
case "$param" in
*[!\ ]*) echo "\$param contains characters other than space";;
*) echo "\$param consists of spaces only";;
esac
Para probar los caracteres de espacios en blanco, la $'…'
sintaxis es específica de ksh / bash / zsh; puede insertar estos caracteres en su script literalmente (tenga en cuenta que una nueva línea tendrá que estar entre comillas, ya que la barra invertida + nueva línea se expande a nada), o generarlos, por ejemplo
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
. Si desea eliminar todos los espacios$param
, use${param// /}