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

这是我在示例中所做的事情,但是此脚本未像我期望的那样打印“function result = 4”。

为了打印“功能结果= 4”,我需要在[[......]]中进行什么更改

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

  #!/bin/ksh

  func1()
  {
    return 4
  }

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

最佳答案

你需要

#!/bin/ksh

  func1()
  {
    print -- 4
  }

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

或者
#!/bin/ksh

  func1()
  {
    return 4
  }

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

您呈现的代码中有几个问题,所以让我尝试解释一下(您使它变得比所需的更加复杂)。

No. 1是您使用反引号代替命令,自1995年以来,ksh语言已弃用这些反引号!使用$(... cmd)进行现代cmd替换。我们经常会看到反引号是对可移植性的致敬,但只有为Bourne shell为而只有 Shell可用的系统编写的脚本才需要使用反引号。 (嗯,我不知道破折号或 Ember ,所以也可能不知道)。

否2.是$吗?在执行函数,命令或管道之后设置,并且是最后一条命令的返回代码。它是介于0到255之间的值。当你有像cmd ; rc=$? ; echo $?这样的代码时;您现在回显rc=$?的分配状态(几乎始终为0),这就是为什么您会看到经验丰富的脚本保存$的值的原因?在做其他事情之前。

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

我希望这有帮助。

关于linux - 括号中的ksh函数返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8873431/

10-15 16:32