Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash函数返回意外值_Bash - Fatal编程技术网

Bash函数返回意外值

Bash函数返回意外值,bash,Bash,这个输出“应该在这里”。如何获取false值?您似乎将输出与返回值混淆了 $function是一个变量,您似乎没有在任何地方填充它。要使用函数的输出填充它,请使用 function() { if something_that_will_fail; then irrelevantcode else echo "should be here" false fi } echo $function 函数的返回值可以从特殊变量$?中检索 outpu

这个输出“应该在这里”。如何获取
false
值?

您似乎将输出与返回值混淆了

$function
是一个变量,您似乎没有在任何地方填充它。要使用函数的输出填充它,请使用

function() {
   if something_that_will_fail; then
      irrelevantcode
   else
      echo "should be here"
      false
   fi
}

echo $function
函数的返回值可以从特殊变量
$?
中检索

output=$(function_call)
如果要在条件中使用它,通常根本不需要变量,因为可以在条件中直接运行函数:

function_call
value=$?
可以缩短为

function_call
if (( $? )) ; then
    echo There was an error
else
    echo Everything OK
fi

Bash没有内置的布尔变量。此外,在我看来,将函数调用为la
$function\u name
也是错误的

我不确定你想要实现什么,但你有两个选择:

  • 您可以在函数中输出字符串,然后检索它们
  • 此外,您还可以通过
    return
    键设置函数的退出状态(这就是
    return
    的全部内容);在这里,您还可以为
    返回指定0-255范围内的状态代码,其中0表示函数成功终止,所有其他数字表示相反
    
例如:

#/usr/bin/env bash
函数大于(){
本地值1=$1
本地值2=$2
如果[[$value1-gt$value2]];则
printf“%s”大于%s!\n“$value1$value2
返回0
其他的
printf“%s”不大于%s!\n“$value1$value2
返回1
fi
}
_func_所说的=$(是否大于21 42)
func_退出_状态=$?
如果[$func_退出_状态-等式0]];然后
echo$u func_说的话
printf“成功代码:%s\n”$func\u退出\u状态
其他的
echo$u func_说的话
printf“错误代码:%s\n”$func\u退出\u状态
fi
输出:

21不大于42!
错误代码:1

false
是一个退出状态始终为1而不是值的命令。另外,请注意,函数的退出状态将是其中最后一个命令的退出状态。在这种情况下,它是
false
,因此函数将以1的状态退出(表示失败),但如果函数在
false
命令后执行任何操作,则该状态将更改。这就是为什么最好使用
return1
之类的工具来控制函数的退出状态<根据定义,code>return
是函数将执行的最后一件事,因此它可以完全控制退出状态。
if function_call ; then
    echo Everything OK
else
    echo There was an error
fi