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