如何将bash函数的返回值直接放入if语句中?

如何将bash函数的返回值直接放入if语句中?,bash,function,shell,Bash,Function,Shell,我有以下功能检查internet连接(我知道有更好的方法检查internet连接,但这不是主题): 现在我想直接在if语句中请求函数的返回值: 我尝试了几个类似的脚本,例如,这一个(我发现的): 我不想在if语句之前初始化更多变量,我所说的“直接”是什么意思。您可以在BASH中使用它来检查函数的输出: [[ $(checkInternet) == online ]] && echo "Function returned online" || echo "Func

我有以下功能检查internet连接(我知道有更好的方法检查internet连接,但这不是主题):

现在我想直接在if语句中请求函数的返回值:

我尝试了几个类似的脚本,例如,这一个(我发现的):


我不想在if语句之前初始化更多变量,我所说的“直接”是什么意思。

您可以在BASH中使用它来检查函数的输出:

[[ $(checkInternet) == online ]] && echo "Function returned online" || 
        echo "Function returned offline"
要比较条件,请使用
[…]
(首选)或
[…]

您可以在不评估任何条件的情况下将上述内容简化为:

echo "Function returned $(checkInternet)"

您可以在BASH中使用此选项检查函数的输出:

[[ $(checkInternet) == online ]] && echo "Function returned online" || 
        echo "Function returned offline"
要比较条件,请使用
[…]
(首选)或
[…]

您可以在不评估任何条件的情况下将上述内容简化为:

echo "Function returned $(checkInternet)"

实际上,您并没有从checkInternet()函数返回值。如果您查看您发布的示例,您将看到他们的函数在末尾有一个return语句。

您实际上并没有从checkInternet()函数返回值。如果您查看您发布的示例,您将看到它们的函数在末尾有一个return语句。

case语句可以很好地完成这一任务,并且没有不可移植的bashism:

case $(checkInternet) in
  (online)  echo is online;;
  (offline) echo is offline;;
esac
您还可以使您的支票返回一个状态,这将简化
中的内容,如果

...
if [ $? -eq 0 ]; then
    true
else
    false
fi
连同

if checkInternet; then
   # online
else
   # offLine
fi

case语句可以很好地实现这一点,并且不会产生不可移植的bashism:

case $(checkInternet) in
  (online)  echo is online;;
  (offline) echo is offline;;
esac
您还可以使您的支票返回一个状态,这将简化
中的内容,如果

...
if [ $? -eq 0 ]; then
    true
else
    false
fi
连同

if checkInternet; then
   # online
else
   # offLine
fi

这是真的,但是解决方案也建议
echo
而不是
return
这是真的,但是解决方案也建议
echo
而不是
return
谢谢。现在它开始工作了。我尝试了代码的第一部分,但使用了引号:
[[$(checkInternet)==“online”]]
。如果字符串可能包含空格,建议使用是引号。谢谢。现在它开始工作了。我尝试了代码的第一部分,但使用了引号:
[[$(checkInternet)=“online”]]
。如果字符串可能包含空格,建议使用是引号。谢谢,这也是一个很好的解决方案,但我采用了anubhava的解决方案already@h0ch5tr4355你不应该。它显然是低劣的,因为它使用了巴西主义。您永远不会后悔便携式POSIX外壳解决方案。总有一天,你会发现自己在一个非Linux机器上。明智地说,从一开始就学习正确的shell编程,不要被世界上所有的bash所束缚。@h0ch5tr4355,别忘了接受它:@Jens,如果你想根据wget的退出状态返回,就把它作为函数的最后一行(因为$?-eq 0已经“成功”)谢谢,这也是一个很好的解决方案,但我接受了阿努巴瓦的解决方案already@h0ch5tr4355你不应该。它显然是低劣的,因为它使用了巴西主义。您永远不会后悔便携式POSIX外壳解决方案。总有一天,你会发现自己在一个非Linux机器上。明智的做法是,从一开始就学习正确的shell编程,不要被世界上所有的bash所束缚。@h0ch5tr4355,别忘了接受它:@Jens,如果你想根据wget的退出状态返回,就把它作为函数的最后一行(因为$?-eq 0已经“成功”)