在下面非常简单的ksh脚本示例中,我需要询问func1结果是否等于4,
这是我在示例中所做的,但是这个脚本没有像我预期的那样打印“function result = 4”。
我需要在[[......]]中更改以打印“function result = 4”
备注 - func1必须在[[.....]]
中 #!/bin/ksh
func1()
{
return 4
}
[[ ` func1 ` = ` echo $? ` ]] && print "function result = 4"
答案 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 $?`
只是过于复杂的说法
$?