在shell中一个函数return一个值,然后赋给一个变量,这个变量作为另一个函数的参数,但参数传不进去!

#!/bin/bash
...#函数原型
#logic begin

choiceProjectMsg #是一个函数,返回平台值
platform=$?#这里这个值从上一个函数返回的值是5
ColourPrint ${RED} "platform=${platform}" #(彩色打印)打印platform的值,测试用。这里打印字体的颜色是红色. 这里打印出来的值也是5,正确
if [ "$platfrom" != '7' ]; then
if [ -d "mt6752" ]; then
cd mt6752
if
choiceMsg ${platform} #这里出错了.这个函数的前两句是这样的请看下面
...
exit 0

注:
rst= "$1"
ColourPrint ${RED} "rst=${rst}" #这里打印的rst=空
不知道怎么回事。
我在199行后面加了对platform的判断。如图所示,执行后,200行打印的是platform=5
201行执行为假,202行不执行。到208行参数传递不进去。具体情况如下图

第61行打印rst=空
上述是情况1
情况二:我把图1中的196,197行恢复,注释掉198,199行,然后执行
结果是200行打印platform=空 ,201行执行为真,202行打印platform1=空
208行函数执行正常。函数内部,图2中61行打印 rst=5,一下执行都正常。
情况三:我在情况一的基础上注释掉198,199行在其后添加一行platform='5',然后执行情况与情况一相同。
不知道为何出现这种情况?

第1个回答  2015-09-07
rst= "$1"

改成
rst=$1追问

还是不行!
我把 choiceProjectMsg #是一个函数,返回平台值
platform=$?#这里这个值从上一个函数返回的值是5
这两行去掉,用read platform #键盘输入5就运行正常

追答

platform=choiceProjectMsg
这样赋值,$?肯定是0,因为是正常返回,如果你想继续用$?那得exit 12345而不是return 12345

追问

我把详细情况及截图发了上去,请您再看一下吧!

追答

choiceProjectMsg问题在这里,返回平台值有问题
platform=choiceProjectMsg

echo $(platform)
或者看看choiceProjectMsg是怎么返回的

追问

我又附加了choiceProjectMsg的图片。这个函数是return值。当然必须用$?接收的。然而我立即把$?的值赋给platform.执行结果也可以看出变量platform的值是正确的,是5.
但是后面这个变量不太管用了。可以打印出来值,但不可以做判断等逻辑运算,也不可以当做参数传递给函数choiceMsg。

追答

这个函数是return值。当然必须用$?接收的。。。

platform=choiceProjectMsg

要我强调几百遍???我都测试过了。。。

是不是局部变量?搞成全局变量呢?

追问

还是不行,我把文件传给你!

本回答被提问者和网友采纳
相似回答