vacio script saber programas programacion pasar parametros esta español ejemplos como comandos archivo bash shell is-empty

bash - saber - shell script linux español



Cómo encontrar si una variable está o no vacía en Bash (10)

En bash al menos el siguiente comando prueba si $ var está vacío :

if [[ -z "$var" ]]; then #do what you want fi

La man test comando es tu amiga.

¿Cómo puedo verificar si una variable está vacía en Bash?


Es posible que desee distinguir entre variables no definidas y variables que están configuradas y vacías:

is_empty() { local var_name="$1" local var_value="${!var_name}" if [[ -v "$var_name" ]]; then if [[ -n "$var_value" ]]; then echo "set and non-empty" else echo "set and empty" fi else echo "unset" fi } str="foo" empty="" is_empty str is_empty empty is_empty none

Resultado:

set and non-empty set and empty unset

Por cierto, recomiendo usar set -u que causará un error al leer las variables no configuradas, esto puede salvarlo de desastres como

rm -rf $dir

Puede leer sobre esta y otras mejores prácticas para un "modo estricto" here .


Esto devolverá true si una variable no está establecida o se establece en la cadena vacía ("").

if [ -z "$MyVar" ] then echo "The variable MyVar has nothing in it." elif ! [ -z "$MyVar" ] then echo "The variable MyVar has something in it." fi


La pregunta pregunta cómo verificar si una variable es una cadena vacía y las mejores respuestas ya se dieron para eso.
Pero aterricé aquí después de pasar un período de programación en php y lo que estaba buscando en realidad era una verificación como la función vacía en php que funciona en un shell bash.
Después de leer las respuestas, me di cuenta de que no estaba pensando correctamente en bash, pero de todos modos en ese momento una función como empty en php hubiera sido tan útil en mi código de bash.
Como creo que esto puede suceder a otros, decidí convertir la función php vacía en bash

Según el manual de php :
una variable se considera vacía si no existe o si su valor es uno de los siguientes:

  • "" (una cadena vacía)
  • 0 (0 como un entero)
  • 0.0 (0 como flotador)
  • "0" (0 como una cadena)
  • una matriz vacía
  • Una variable declarada, pero sin valor.

Por supuesto, los casos nulos y falsos no se pueden convertir en bash, por lo que se omiten.

function empty { local var="$1" # Return true if: # 1. var is a null string ("" as empty string) # 2. a non set variable is passed # 3. a declared variable or array but without a value is passed # 4. an empty array is passed if test -z "$var" then [[ $( echo "1" ) ]] return # Return true if var is zero (0 as an integer or "0" as a string) elif [ "$var" == 0 2> /dev/null ] then [[ $( echo "1" ) ]] return # Return true if var is 0.0 (0 as a float) elif [ "$var" == 0.0 2> /dev/null ] then [[ $( echo "1" ) ]] return fi [[ $( echo "" ) ]] }



Ejemplo de uso:

if empty "${var}" then echo "empty" else echo "not empty" fi



Manifestación:
el siguiente fragmento de código:

#!/bin/bash vars=( "" 0 0.0 "0" 1 "string" " " ) for (( i=0; i<${#vars[@]}; i++ )) do var="${vars[$i]}" if empty "${var}" then what="empty" else what="not empty" fi echo "VAR /"$var/" is $what" done exit

salidas:

VAR "" is empty VAR "0" is empty VAR "0.0" is empty VAR "0" is empty VAR "1" is not empty VAR "string" is not empty VAR " " is not empty

Habiendo dicho que en una lógica de bash, las comprobaciones en cero en esta función pueden causar problemas secundarios. Cualquiera que use esta función debería evaluar este riesgo y tal vez decidir cortar esas comprobaciones dejando solo la primera.


Para comprobar si la variable v no está configurada

if [ "$v" == "" ]; then echo "v not set" fi


Suponiendo que bash

var="" if [ -n "$var" ]; then echo "not empty" else echo "empty" fi



[ "$variable" ] || echo empty : ${variable="value_to_set_if_unset"}


if [ ${foo:+1} ] then echo "yes" fi

imprime yes si la variable está configurada. ${foo:+1} devolverá 1 cuando se establezca la variable, de lo contrario, devolverá una cadena vacía.


if [[ "$variable" == "" ]] ...