我想在if语句中测试一个bash函数返回值,如下所示:
if [[ func arg ]] ; then …
Run Code Online (Sandbox Code Playgroud)
但我收到错误消息,如:条件二进制运算符预期.
这样做的正确方法是什么?
是吗:
if [[ $(func arg) ]] ; then ...
Run Code Online (Sandbox Code Playgroud)
kay*_*kay 70
如果是退出代码而不是结果你可以使用
if func arg; then ...
Run Code Online (Sandbox Code Playgroud)
如果您无法使函数返回正确的退出代码(with return N),并且您必须使用字符串结果,请使用@Alex Gitelman答案.
$ help if:
if: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi基于条件执行命令.
该
if COMMANDS列表已执行.如果其退出状态为零,则then COMMANDS执行列表.否则,elif COMMANDS依次执行每个列表,如果其退出状态为零,then COMMANDS则执行相应的 列表并完成if命令.否则,执行`else COMMANDS'列表(如果存在).整个构造的退出状态是最后执行的命令的退出状态,如果没有条件测试为真,则为零.退出状态:返回最后执行的命令的状态.
Ale*_*man 16
如果函数返回多个单词,则似乎会产生此错误.
例如,1 2.
引用它:
"$(func arg)"
Run Code Online (Sandbox Code Playgroud)
样品:
$ if [[ 1 2 ]] ; then echo 1 ; fi
-bash: conditional binary operator expected
-bash: syntax error near `2'
$ if [[ "1 2" ]] ; then echo 1 ; fi
1
Run Code Online (Sandbox Code Playgroud)
如果你比较0和非0只是使用
if [[ "$(func arg)" != "0" ]]
Run Code Online (Sandbox Code Playgroud)
小智 15
这对我很有用,所以我会添加以下细节.
如果需要测试两个条件,一个是函数/命令的退出状态,另一个是变量的值,请使用:
if func arg && [[ $foo -eq 1 ]]; then echo TRUE; else echo FALSE; fi
Run Code Online (Sandbox Code Playgroud)
相关说明,如果函数返回各种退出代码而不是 true/false,则:
func args; ec=$? # call function and grab the exit code
# it is better to have them on the same line so that a future addition of a command
# before the case statement wouldn't break the logic
case $ec in
value1) # commands
;;
value2) # commands
;;
*) # commands
;;
esac
Run Code Online (Sandbox Code Playgroud)