Imprime o valor de eco e retorno na função bash

1

Eu quero imprimir o eco na função e retornar o valor. Não está funcionando:

function fun1() {
    echo "Start function"
    return "2"
}

echo $(( $(fun1) + 3 ))

Eu só posso imprimir o eco:

function fun1() {
    echo "Start function"
}

fun1

Ou só posso retornar valor:

function fun1() {
    echo "2" # returning value by echo
}

echo $(( $(fun1) + 3 ))

Mas não posso fazer as duas coisas.

    
por mkczyk 08.05.2018 / 12:35

2 respostas

2

Bem, dependendo do que você deseja, existem várias soluções:

  1. Imprima a mensagem para stderr e o valor que você deseja obter em stdout .

    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 ))
    
  2. Imprima a mensagem normalmente em stdout e use o valor de retorno real com $? .
    Observe que o valor de retorno sempre será um valor de 0 - 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 ))
    
  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 ))
    
por 08.05.2018 / 12:41
1

Com variável adicional (por "referência"):

function fun1() {
    echo "Start function"
    local return=$1
    eval $return="2"
}

fun1 result
echo $(( result + 3 ))
    
por 08.05.2018 / 12:44

Tags