在bash中,如何将返回值存储在变量中?

新手上路,请多包涵

我知道 Linux 中的一些非常基本的命令,并且正在尝试编写一些脚本。我编写了一个函数,用于计算 5 位数字中最后 2 位数字的总和。该函数应该在最后 2 位数字之间连接这个结果总和并返回它。我想返回这个值的原因是因为我将在另一个函数中使用这个值。

例如:如果我有 12345,那么我的函数将计算 4+5 并返回 495。

 #!/bin/bash

set -x
echo "enter: "
        read input

function password_formula
{
        length=${#input}
        last_two=${input:length-2:length}
        first=`echo $last_two| sed -e 's/\(.\)/\1 /g'|awk '{print $2}'`
        second=`echo $last_two| sed -e 's/\(.\)/\1 /g'|awk '{print $1}'`
        let sum=$first+$second
        sum_len=${#sum}
        echo $second
        echo $sum

        if [ $sum -gt 9 ]
        then
               sum=${sum:1}
        fi

        value=$second$sum$first
        return $value
}
result=$(password_formula)
echo $result

我正在尝试回显并查看结果,但我得到的输出如下所示。

 -bash-3.2$ ./file2.sh
+++ password_formula
+++ echo 'enter: '
+++ read input
12385
+++ length=8
+++ last_two=85
++++ echo 85
++++ sed -e 's/\(.\)/\1 /g'
++++ awk '{print $2}'
+++ first=5
++++ echo 85
++++ sed -e 's/\(.\)/\1 /g'
++++ awk '{print $1}'
+++ second=8
+++ let sum=5+8
+++ sum_len=2
+++ echo 5
+++ echo 8
+++ echo 13
+++ '[' 13 -gt 9 ']'
+++ sum=3
+++ value=835
+++ return 835
++ result='enter:
5
8
13'
++ echo enter: 5 8 13
enter: 5 8 13

我还尝试将结果打印为:

 password_formula
RESULT=$?
echo $RESULT

但这给出了一些未知的价值:

 ++ RESULT=67
++ echo 67
67

如何正确存储正确的值并在屏幕上打印(仔细检查)?

提前致谢。

原文由 itsh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 495
1 个回答

最简单的答案:

函数的返回码只能是 0 到 255 范围内的值。要将此值存储在变量中,您必须像此示例中那样执行:

 #!/bin/bash

function returnfunction {
    # example value between 0-255 to be returned
    return 23
}

# note that the value has to be stored immediately after the function call :
returnfunction
myreturnvalue=$?

echo "myreturnvalue is "$myreturnvalue

原文由 Samuele Catuzzi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题