首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UNIX:可以绕过unix的出口代码吗?

UNIX:可以绕过unix的出口代码吗?
EN

Stack Overflow用户
提问于 2011-11-07 15:59:26
回答 1查看 1.9K关注 0票数 2

我正在编写一些Shell代码,为了编程的一些逻辑,我需要用负数做一些返回。这是:

代码语言:javascript
复制
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. (来自status#Unix)

有办法绕过这个吗?(我知道我可以再用一个返回号)

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-07 16:43:55

对不起,shell脚本的Unix标准是成功退出0,不成功退出非零。

你能做的最好的就是捕获返回值,并根据你的意愿使用它们。

代码语言:javascript
复制
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标准

同时,$()也被称为命令替换。您将看到,人们也会使用配对的倒排代码'cmd‘来实现命令sub,但是使用$( cmd ),除非您在Sun/AIX或其他传统供应商平台上使用原始的承载shell编码,或者您需要创建完全向后的代码(重点放在向后!)兼容。

$()很好,因为你可以任意地嵌套它们。

代码语言:javascript
复制
 $( cmd1 $( cmd2 $( cmd..n ) ) )

根据新的Kornshell编程语言(ISBN-10: 0131827006,1995年!)后排不受欢迎。

请注意,这两种类型的命令替换都是创建一个子shell来运行该命令,然后将结果“替换”到命令行中。

我希望这有帮助;-)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8038986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档