Linux Shell常用命令及技巧

今天有个开发人员写了这么一段shell(当然我把业务给省略了,真实情况当然没这么简单):

#!/bin/sh function foo(){ result=$(echo $1) return $result } function invoker(){ foo $1 return $? } invoker 13 echo $? invoker 1011 echo $?

大家猜想一下结果,开发人员认为应该打印13和1011,但结果却是13和243,打开shell的debug信息:

+ invoker 13 + foo 13 ++ echo 13 + result=13 + return 13 + return 13 + echo 13 13 + invoker 1011 + foo 1011 ++ echo 1011 + result=1011 + return 1011 + return 243 + echo 243 243

大家发现返回13的时候正常而1011怎么就会变成243呢?

其实这里有一个本质性的错误,那就是shell获得函数的返回值的方式基本只有两种:1. 将返回值打印到标准输出或者是文件2. 将返回值赋值给全局变量

如果这样写:

#!/bin/sh function foo(){ result=$(echo $1) echo $result } echo `foo 13` echo `foo 1011`

运行结果就正确了,而且代码废话还少很多。

回到问题上来,那shell里面用return是什么意思呢?其实它只是执行函数执行的状态码,比如执行成功肯定返回0,不成功返回一个1~255之间的数。所以当传入1011时超过了255的范围,被截断为后8位,变成243了。

所以,shell中的return和Java、Python这种语言的return是不一样的,不要想当然,同时shell中的return只能返回数字,如果你试图返回字符串之类运行时就会报错。

在繁华中体会热闹;若是厌倦了喧嚣,寻一处宁静的幽谷,

Linux Shell常用命令及技巧

相关文章:

你感兴趣的文章:

标签云: