Shell脚本的返回值在(正常与debugging模式)执行中不同

我正在解决这个“recursion的因子函数(=获得n!n个参数)”的问题。 这是我想出的bash shell脚本代码。 我给一个整数作为参数:

#!/bin/bash # Script name: RecFact.sh # # recursive factorial factorial(){ if [ $1 -eq 0 ]; then return 1 fi pro=`expr $pro \* $1` factorial `expr $1 - 1` return $pro } pro=1 factorial $1 echo "$?" 

问题是,当我在terminal上以1〜5作为它需要的一个参数(例如./RecFact.sh 5)运行它时,返回值(如5为120)是正确的。

但是当参数超过5时,就会发生所有错误(比如208,而不是720)。

真奇怪的是,如果我在debugging模式下运行它(例如sh -x ./RecFact.sh 6),debugging器会为每个input值提供正确的值(如6)。

可能是什么原因?

错误代码(你检查$?)的范围是0-255。 事实上,720模256给你208。

而不是滥用$? 您应该使用专用变量来传达结果。

在正常模式下,即当你正在执行./RecFact.sh 6时,你正在执行

bash RecFact.sh 6

因为在你的脚本中你有#!/bin/bash

但是在调试模式下

sh -x ./RecFact.sh 6

你正在执行使用sh。 在我的系统sh有一个短划线的链接。 您的系统中也可能会出现这种情况。

bashdash是两个不同的shell,大多数命令的工作方式是一样的,但是它们是不同的。 因此你看到两个不同的输出。

所以在你的脚本中,如果你把#!/bin/bash改成#!/bin/bash #!/bin/sh ,它就可以正常工作。 此外,@ employee的月份是正确的。 不要滥用$?