$? 仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得。
测试代码:
#!/bin/bash
function demoFun1(){
echo "这是我的第一个 shell 函数!"
return `expr 1 + 1`
}
demoFun1
echo $?
function demoFun2(){
echo "这是我的第二个 shell 函数!"
expr 1 + 1
}
demoFun2
echo $?
demoFun1
echo 在这里插入命令!
echo $?
输出结果:
这是我的第一个 shell 函数!
2
这是我的第二个 shell 函数!
2
0
这是我的第一个 shell 函数!
在这里插入命令!
0
调用 demoFun2 后,函数最后一条命令 expr 1 + 1 得到的返回值($?值)为 0,意思是这个命令没有出错。所有的命令的返回值仅表示其是否出错,而不会有其他有含义的结果。
第二次调用 demoFun1 后,没有立即查看 $? 的值,而是先插入了一条别的 echo 命令,最后再查看 $? 的值得到的是 0,也就是上一条 echo 命令的结果,而 demoFun1 的返回值被覆盖了。
下面这个测试,连续使用两次 echo $?,得到的结果不同,更为直观:
#!/bin/bash
function demoFun1(){
echo "这是我的第一个 shell 函数!"
return `expr 1 + 1`
}
demoFun1
echo $?
echo $?
输出结果:
这是我的第一个 shell 函数!
2
0