I find that within a function, using command substitution to put the command output in a variable, using $? to get the exit code from the command substitution returns 0, not the returned code.
The command substitution returns the return code as expected when not in a function.
I would like to access both the text returned and the return code. I know a workaround is to redirect the output to a file and then cat the file to a variable. I would like to avoid using a file.
I have found nothing online to help.
Any thoughts?
bash script demonstrating this:
#!/bin/bash
# 20210511
# return_test.sh
# test of return code within a function
declare -rx this_script=${0##*/}
function return_1 () {
    
    echo "returned text"
    return 1
} # function return_1
function return_test () {
    
    local return_value=$`return_1`
    echo "return 1 \`\`   code = $?"
    echo $return_value
    local return_value=$(return_1)
    echo "return 1 ()   code = $?"
    echo $return_value
    local return_value=$( (return_1) )
    echo "return 1 (()) code = $?"
    echo $return_value
    return_1
    echo "return 1      code = $?"
} # function return_test
echo ""
echo "Starting $this_script"
echo "Test of return codes from a command substituted function called with a function"
echo
return_test
echo
echo "Test not in a function"
return_value=$(return_1)
echo "return 1 ()   code = $?"
echo $return_value
echo
exit
The output:
$ ./return_test.sh
Starting return_test.sh
Test of return codes from a command substituted function called with a function
return 1 ``   code = 0
$returned text
return 1 ()   code = 0
returned text
return 1 (()) code = 0
returned text
returned text
return 1      code = 1
Test not in a function
return 1 ()   code = 1
returned text
 
    