括号中的ksh函数返回值

6 linux bash shell ksh function

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

这就是我在示例中所做的,但是这个脚本不会像我预期的那样打印"function result = 4".

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

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

  #!/bin/ksh

  func1()
  {
    return 4
  }

  [[ ` func1 ` = ` echo $? `  ]]  && print "function result = 4"  
Run Code Online (Sandbox Code Playgroud)

she*_*ter 12

你需要

#!/bin/ksh

  func1()
  {
    print -- 4
  }

  [[ $(func1) = 4  ]]  && print "function result = 4"  
Run Code Online (Sandbox Code Playgroud)

要么

#!/bin/ksh

  func1()
  {
    return 4
  }

  func1 ; [[ $? == 4 ]]  && print "function result = 4"
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

我希望这有帮助.