在以下非常简单的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/