bash - programacion - scripts linux ejercicios resueltos
Compruebe si la cadena no está vacía ni espacio en el script de shell (6)
Estoy tratando de ejecutar el siguiente script de shell que se supone que comprueba si una cadena no está vacía ni vacía. Sin embargo, estoy obteniendo el mismo resultado para todas las 3 cadenas mencionadas. He intentado usar la sintaxis "[[" también, pero sin éxito.
Aquí está mi código:
str="Hello World"
str2=" "
str3=""
if [ ! -z "$str" -a "$str"!=" " ]; then
echo "Str is not null or space"
fi
if [ ! -z "$str2" -a "$str2"!=" " ]; then
echo "Str2 is not null or space"
fi
if [ ! -z "$str3" -a "$str3"!=" " ]; then
echo "Str3 is not null or space"
fi
Estoy obteniendo el siguiente resultado:
# ./checkCond.sh
Str is not null or space
Str2 is not null or space
En caso de que necesite comparar con cualquier cantidad de espacios en blanco, no solo con un solo espacio, puede hacer esto:
Para eliminar la cadena de espacio en blanco adicional (también condences espacios en blanco en el medio a un espacio):
trimmed=`echo -- $original`
El --
asegura que si $original
contiene interruptores entendidos por eco, aún serán considerados como argumentos normales para ser repetidos. También es importante no colocar ""
alrededor de $original
, o los espacios no se eliminarán.
Después de eso, puedes verificar si $trimmed
está vacío.
[ -z "$trimmed" ] && echo "empty!"
Necesita un espacio a cada lado de la !=
. Cambie su código a:
str="Hello World"
str2=" "
str3=""
if [ ! -z "$str" -a "$str" != " " ]; then
echo "Str is not null or space"
fi
if [ ! -z "$str2" -a "$str2" != " " ]; then
echo "Str2 is not null or space"
fi
if [ ! -z "$str3" -a "$str3" != " " ]; then
echo "Str3 is not null or space"
fi
Otra prueba rápida para que una cuerda tenga algo dentro, pero espacio.
if [[ -n "${str// /}" ]]; then
echo "It is not empty!"
fi
"-n" significa cadena de longitud distinta de cero.
Luego, las dos primeras barras diagonales coinciden con todas las siguientes, en nuestro (s) espacio (s) de caso. Luego se sigue la tercera barra con la cadena de reemplazo (vacía) y se cierra con "}". Observe la diferencia con la sintaxis de expresión regular habitual.
Puede leer más sobre la manipulación de cadenas en las secuencias de comandos de shell bash aquí .
Para comprobar la cadena vacía en shell
if [ "$str" == "" ];then
echo NULL
fi
O
if [ ! "$str" ];then
echo NULL
fi
Para verificar si una cadena está vacía o solo contiene espacios en blanco, puede usar:
shopt -s extglob # more powerful pattern matching
if [ -n "${str##+([[:space:]])}" ]; then
echo ''$str is not null or space''
fi
Consulte Expansión de parámetros de shell y Coincidencia de patrones en el Manual de Bash.
[ $(echo $variable_to_test | sed s//n// | sed s// //) == "" ] && echo "String is empty"
Eliminar todas las nuevas líneas y espacios de la cadena causará que el espacio en blanco se reduzca a nada, lo que se puede probar y aplicar