微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在bash中,如何在一个variables中存储返回值?

我知道Linux中的一些非常基本的命令,并且正在尝试编写一些脚本。 我写了一个函数,用5位数字来计算最后两位数的总和。 该函数应该在最后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

我也尝试打印结果如下:

如何在bash中将十进制转换为hex?

在Paralell Bash中运行Serial

生成脚本在Windows上失败,但不在Linux或OSX上

删除一个匹配

将文本追加到文件中的多行中的每一行

password_formula RESULT=$? echo $RESULT

但那是一个未知的价值:

++ RESULT=67 ++ echo 67 67

如何正确存储正确的值并在屏幕上进行打印(双重检查)?

提前致谢。

语法错误附近的意外令牌“做”与sudo运行时

用sedreplace同等长度的文本

在.profile中运行程序会减慢GUI startx

拿到连接的设备列表

如何获得使用脚本运行的shell的名称

改变这一行:

return $value

喜欢这个:

echo $value

然后你可以捕捉它的输出

返回值(又名退出代码)是一个介于0到255之间的值。 它用来表示成功或失败,而不是返回信息。 超出此范围的任何值都将被打包。

要返回信息,如您的号码,请使用

echo "$value"

要打印您不想捕获的附加信息,请使用

echo "my irrelevant info" >&2

最后,捕捉它,使用你所做的:

result=$(password_formula)

换一种说法:

echo "enter: " read input 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 >&2 echo $sum >&2 if [ $sum -gt 9 ] then sum=${sum:1} fi value=$second$sum$first echo $value } result=$(password_formula) echo "The value is $result"

上面的答案建议改变函数来回显数据,而不是返回,以便它可以被捕获。

对于不能修改返回值需要保存到变量(如test / [ ,返回0/1成功值)的函数或程序,echo $? 在命令替换之内:

# Test if we're remote. isRemote="$(test -z "$REMOTE_ADDR"; echo $?)" # Or: isRemote="$([ -z "$REMOTE_ADDR" ]; echo $?)" # Additionally you may want to reverse the 0 (success) / 1 (error) values # for your own sanity,using arithmetic expansion: remoteAddrIsEmpty="$([ -z "$REMOTE_ADDR" ]; echo $((1-$?)))"

例如

$ echo $REMOTE_ADDR $ test -z "$REMOTE_ADDR"; echo $? 0 $ REMOTE_ADDR=127.0.0.1 $ test -z "$REMOTE_ADDR"; echo $? 1 $ retval="$(test -z "$REMOTE_ADDR"; echo $?)"; echo $retval 1 $ unset REMOTE_ADDR $ retval="$(test -z "$REMOTE_ADDR"; echo $?)"; echo $retval 0

对于打印数据的程序,还有要保存的返回值,返回值将从输出中分别捕获:

# Two different files,1 and 2. $ cat 1 1 $ cat 2 2 $ diffs="$(cmp 1 2)" $ haveDiffs=$? $ echo "Have differences? [$haveDiffs] Diffs: [$diffs]" Have differences? [1] Diffs: [1 2 differ: char 1,line 1] $ diffs="$(cmp 1 1)" $ haveDiffs=$? $ echo "Have differences? [$haveDiffs] Diffs: [$diffs]" Have differences? [0] Diffs: [] # Or again,if you just want a success variable,reverse with arithmetic expansion: $ cmp -s 1 2; filesAreIdentical=$((1-$?)) $ echo $filesAreIdentical 0

最简单的答案:

函数的返回码只能是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

你很容易回声你需要返回的值,然后像下面捕获它

demofunc(){ local variable="hellow" echo $variable } val=$(demofunc) echo $val

这是由于echo陈述。 你可以把你的回声打印出来,并用echo返回。 下面的作品

#!/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} print $second print $sum if [ $sum -gt 9 ] then sum=${sum:1} fi value=$second$sum$first echo $value } result=$(password_formula) echo $result

使用特殊的bash变量“$?” 像这样:

function_output=${my_function} function_return_value=$?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐