Lo que estás buscando es indirección.
assertNotEmpty() {
: "${!1:? "$1 is empty, aborting."}"
}
Eso hace que la secuencia de comandos para abortar con un mensaje de error si haces algo como esto:
$ foo=""
$ assertNotEmpty foo
bash: !1: foo is empty, aborting.
Si lo que desea es prueba si foo
está vacía, en lugar de abortar el guión, utilizar esto en vez de una función:
[[ $foo ]]
Por ejemplo:
until read -p "What is your name? " name && [[ $name ]]; do
echo "You didn't enter your name. Please, try again." >&2
done
Además, tenga en cuenta que hay una diferencia muy importante entre un vacío y un parámetro de desarmar . ¡Debe tener cuidado de no confundir estos términos! Un parámetro vacío es uno que está establecido pero que acaba de establecerse en una cadena vacía. Un parámetro no establecido es uno que no existe en absoluto.
Todos los ejemplos anteriores prueban parámetros vacíos.Si desea probar la no se ha establecido parámetros y considerar todos los parámetros establecidos bien, si están vacíos o no, utilizar esto:
[[ ! $foo && ${foo-_} ]]
utilizarlo en una función como esta:
assertIsSet() {
[[ ! ${!1} && ${!1-_} ]] && {
echo "$1 is not set, aborting." >&2
exit 1
}
}
que sólo aborta la secuencia de comandos cuando el nombre único parámetro que indica un parámetro que no se establece:
$ (foo="blah"; assertIsSet foo; echo "Still running.")
Still running.
$ (foo=""; assertIsSet foo; echo "Still running.")
Still running.
$ (unset foo; assertIsSet foo; echo "Still running.")
foo is not set, aborting.
Su título dice "desactivada", pero su ejemplo prueba "ya sea desarmado o se establece en la cadena vacía". ¿Qué caso te importa? –