Return value in a Bash function

bash, function, return-value

Solution

Although Bash has a `return` statement, the only thing you can specify with it is the function's own `exit` status (a value between `0` and `255`, 0 meaning "success"). So `return` is not what you want.

You might want to convert your `return` statement to an `echo` statement - that way your function output could be captured using `$()` braces, which seems to be exactly what you want.

Here is an example:

function fun1(){
  echo 34
}

function fun2(){
  local res=$(fun1)
  echo $res
}

Another way to get the return value (if you just want to return an integer 0-255) is `$?`.

function fun1(){
  return 34
}

function fun2(){
  fun1
  local res=$?
  echo $res
}

Also, note that you can use the return value to use Boolean logic - like `fun1 || fun2` will only run `fun2` if `fun1` returns a non-`0` value. The default return value is the exit value of the last statement executed within the function.

Problem

I am working with a bash script and I want to execute a function to print a return value: ``` function fun1(){ return 34 } function fun2(){ local res=$(fun1) echo $res } ``` When I execute `fun2`, it does not print "34". Why is this the case?

Original source

Related problems