我正在编写一些 Shell 代码,对于某些编程逻辑,我需要使用负数数字执行返回。这是:
if condition ; then
return -1
else
return -2
fi
尽管如此,我在使用负数时会出错,可能是因为:Unix exit statuses are restricted to values 0-255, the range of an unsigned 8-bit integer.
(来自http://en.wikipedia.org/wiki/Exit_status#Unix)
有没有办法绕过这个? (我知道我可以使用另一个返回号码)
谢谢。
答案 0 :(得分:5)
很抱歉,但是针对shell脚本的Unix标准是成功退出0并且因非成功而退出非零。
您可以做的最好的事情是捕获返回值并根据需要使用它们,即
myfunc () {
printf -- "$1" "\n"
if (( ${1:-0} == 0 )) ; then
return 0
else
return 1
fi
}
var=$(myfunc -2)
print var=${var}
#output
var=-2
不是你的领主想要听到的内容,而是将他们引荐到Posix Standards。
同样FYI,$()
称为命令替换。您将看到人们还实现了命令子,其中配对的后退标记为“cmd
”,但使用$( cmd )
,除非您在Sun / AIX或其他传统供应商平台上使用原始的shell外壳编码或者您需要创建完全向后的代码(强调向后!)兼容。
$()
很好,因为你可以根据需要嵌套它们,即
$( cmd1 $( cmd2 $( cmd..n ) ) )
根据New Kornshell编程语言(ISBN-10:0131827006,1995!),不推荐使用反引号。
请注意,任何类型的命令替换都会创建一个子shell来运行命令,然后将结果“替换”到命令行中。
我希望这会有所帮助; - )