linux - ksh 函数返回值在括号中

标签 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"  

最佳答案

你需要

#!/bin/ksh

  func1()
  {
    print -- 4
  }

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

#!/bin/ksh

  func1()
  {
    return 4
  }

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

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

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

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

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

希望对您有所帮助。

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

相关文章:

c - c中的错误函数返回

javascript - Protractor - X 不是函数

c++ - 如何在 Linux 下为 C/C++ 中的计时器设置亲和性?

linux - TLB 中的内核内存(虚拟地址条目)?

linux - 如果后跟管道(bash 错误?),Bash 变量默认设置不起作用

regex - 否定字符类中的单引号

javascript - 如何让动画在视口(viewport)中启动一次

linux - 组的所有命令都应该成功或无

linux - 从Visual Studio在Linux docker容器中调试nunit测试

bash - 如何命令 ls 命令按数字顺序显示?