Quiero devolver el valor de una función llamada en un script de shell. Quizás me falta la sintaxis. Intenté usar las variables globales. Pero eso tampoco está funcionando. El codigo es:
lockdir="somedir"
test() {
retval=""
if mkdir "$lockdir"
then # Directory did not exist, but it was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval="true"
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval="false"
fi
return retval
}
retval=test()
if [ "$retval" == "true" ]
then
echo "directory not created"
else
echo "directory already created"
fi
shell
return-value
Mridul Vishal
fuente
fuente
Respuestas:
Una función Bash no puede devolver una cadena directamente como lo desea. Puedes hacer tres cosas:
Esto también es cierto para algunos otros proyectiles.
Aquí le mostramos cómo hacer cada una de esas opciones:
1. cuerdas de eco
2. Estado de salida de retorno
3. Compartir variable
fuente
function
palabra clave para definir una función bash. Eso lo haría menos portátil. QuitándoloEstás trabajando demasiado duro. Su guión completo debe ser:
pero incluso eso es probablemente demasiado detallado. Lo codificaría:
pero el mensaje de error resultante es un poco oscuro.
fuente
mkdir "$lockdir" || { echo "could not create lock dir" >&2 ; exit 1 ; }
(tenga en cuenta lo;
anterior antes del cierre de la llave). Además, a menudo defino una función de falla que toma un parámetro de mensaje opcional que imprime en stderr y luego sale con el código de retorno 1, lo que me permite usar el más legiblemkdir "$lockdir" || fail "could not create lock dir"
.cmd || fail "error msg" || return 1
si deseas hacer eso, ¿verdad?fail
función que se usa solo para situaciones fatales.Si es solo una prueba de verdadero / falso, tenga su función
return 0
para el éxito yreturn 1
para el fracaso. La prueba sería entonces:fuente
Creo que devolver 0 para succ / 1 para fail (glenn jackman) y la respuesta clara y explicativa de olibre lo dice todo; solo para mencionar un tipo de enfoque "combinado" para los casos en que los resultados no son binarios y preferiría establecer una variable en lugar de "hacer eco" de un resultado (por ejemplo, si su función TAMBIÉN se supone que repite algo, este enfoque será no trabajo). ¿Entonces que? (a continuación se muestra Bourne Shell)
como en (sí, el ejemplo es algo tonto, es solo un ... ejemplo)
fuente
En caso de que tenga algunos parámetros para pasar a una función y desee un valor a cambio. Aquí paso "12345" como argumento a una función y después de procesar la variable de retorno XYZ que se asignará a VALUE
Salida:
fuente