括号中的ksh函数返回值

时间:2012-01-15 21:14:48

标签: linux bash function shell ksh

在下面非常简单的ksh脚本示例中,我需要询问func1结果是否等于4,

这是我在示例中所做的,但是这个脚本没有像我预期的那样打印“function result = 4”。

我需要在[[......]]中更改以打印“function result = 4”

备注 - func1必须在[[.....]]

  #!/bin/ksh

  func1()
  {
    return 4
  }

  [[ ` func1 ` = ` echo $? `  ]]  && print "function result = 4"  

2 个答案:

答案 0 :(得分:11)

你需要

#!/bin/ksh

  func1()
  {
    print -- 4
  }

  [[ $(func1) = 4  ]]  && print "function result = 4"  

OR

#!/bin/ksh

  func1()
  {
    return 4
  }

  func1 ; [[ $? == 4 ]]  && print "function result = 4"

您提供的代码中存在几个问题,因此让我尝试解释一下(您使它变得比它需要的更复杂)。

没有。 1是你使用back-ticks进行命令替换,自1995年以来,这些已被ksh语言弃用!使用$(... cmd)进行现代cmd替换。我们经常将反引号列为可移植性的标识,但只有为Bourne shell为 only shell的系统编写的脚本才需要使用反引号。 (好吧,我不知道破折号或灰,所以也许那些)。

没有2.那是$?在执行函数或命令或管道之后得到设置,并且是最后一个命令的返回码。它是0-255之间的值。当你有像cmd ; rc=$? ; echo $?这样的代码时;你现在正在回应rc=$?(几乎总是0)的分配状态,这就是为什么你会看到有经验的脚本保存$的价值?在做任何其他事情之前。

回想一下,命令替换使用$( ... cmd ...)或backtics封闭命令的输出,而return设置$?的值(直到下一个命令执行重置该值)。

我希望这会有所帮助。

答案 1 :(得分:4)

函数返回4.运算符``(反引号)忽略结果值,而是返回函数的stdout(在你的情况下为空字符串,因为func1没有向stdout打印任何内容)。

并且

`echo $?`

只是过于复杂的说法

$?