bool(){ return "$((!${#1}))"; }
if bool "$var"
then : do true
else : do false
Simplemente establezca una variable en cualquier cosa que no sea nula para que funcione lo anterior, aunque [ -n "$var" ]
sería más corto, si no tan obvio.
En general, cuando un script interpreta que una variable de entorno es verdadera o falsa, interpretará cualquier valor como verdadero (y, a veces, usará dicho valor para configurar alguna opción) o un valor nulo como falso.
Lo anterior devuelve el !not
valor booleano de la len de su primer argumento: si el argumento contiene cualquier número de caracteres que no sea 0, devuelve 0, de lo contrario, si no tiene ningún carácter, devuelve 1. Esta es la misma prueba con la que puede realizar [ -n "$var" ]
, básicamente , pero simplemente lo envuelve en una pequeña función llamada bool()
.
Por lo general, así es como funciona una variable de bandera . Por ejemplo:
[ -d "$dir" ] || dir=
Donde otras partes de un script solo necesitan buscar algún valor $dir
para evaluar su utilidad. Esto también es útil cuando se trata de la sustitución de parámetros, ya que los parámetros se pueden expandir a los valores predeterminados para completar los valores vacíos o no establecidos, pero de lo contrario se expandirán a un valor preestablecido como ...
for set in yes ''
do echo "${set:-unset or null}"
done
... que imprimiría ...
yes
unset or null
Por supuesto, también es posible hacer lo contrario, :+
pero eso solo puede darle un valor predeterminado predeterminado o nada en absoluto, mientras que el formulario anterior puede darle un valor o un valor predeterminado.
Y así, con respecto a las tres opciones, cualquiera podría funcionar dependiendo de cómo elija implementarlo. El retorno de la función es de autocomprobación, pero, si ese retorno necesita guardarse por algún motivo, deberá colocarse en una variable. Depende del caso de uso: ¿es el valor booleano que desea evaluar una prueba una vez y listo? Si es así, realice la función, de lo contrario, cualquiera de los otros dos probablemente sea necesario.
help true ; help false ; help exit