Bem, dependendo do que você deseja, existem várias soluções:
-
Imprima a mensagem para
stderr
e o valor que você deseja obter emstdout
.function fun1() { # Print the message to stderr. echo "Start function" >&2 # Print the "return value" to stdout. echo "2" } # fun1 will print the message to stderr but $(fun1) will evaluate to 2. echo $(( $(fun1) + 3 ))
-
Imprima a mensagem normalmente em
stdout
e use o valor de retorno real com$?
.
Observe que o valor de retorno sempre será um valor de0
-255
(Obrigado Gordon Davisson ).function fun1() { # Print the message to stdout. echo "Start function" # Return the value normally. return "2" } # fun1 will print the message and set the variable ? to 2. fun1 # Use the return value of the last executed command/function with "$?" echo $(( $? + 3 ))
-
Basta usar a variável global.
# Global return value for function fun1. FUN1_RETURN_VALUE=0 function fun1() { # Print the message to stdout. echo "Start function" # Return the value normally. FUN1_RETURN_VALUE=2 } # fun1 will print the message to stdout and set the value of FUN1RETURN_VALUE to 2. fun1 # ${FUN1_RETURN_VALUE} will be replaced by 2. echo $(( ${FUN1_RETURN_VALUE} + 3 ))