当前位置: 首页 > 知识库问答 >
问题:

bash“if[false];”返回true而不是false--为什么?

蔚弘量
2023-03-14

为什么以下输出为True?

#!/bin/sh

if [ false ]; then
    echo "True"
else
    echo "False"
fi

这将始终输出True,即使条件似乎表明并非如此。如果我删除括号[],那么它可以工作,但我不明白为什么。

共有3个答案

岳良策
2023-03-14

我发现我可以通过运行以下内容来执行一些基本逻辑:

A=true
B=true
if ($A && $B); then
    C=true
else
    C=false
fi
echo $C
祁飞翰
2023-03-14

if语句将命令作为参数(如do

test语句将运算符和操作数作为参数,并以与if相同的格式返回结果代码。test语句的别名是[/code>,通常与if一起使用,以执行更复杂的比较。

true和false语句不执行任何操作,并返回结果代码(分别为0和1)。因此,它们可以在Bash中用作布尔文字。但是如果你把语句放在一个被解释为字符串的地方,你就会遇到问题。就您而言:

if [ foo ]; then ... # "if the string 'foo' is non-empty, return true"
if foo; then ...     # "if the command foo succeeds, return true"

所以:

if [ true  ] ; then echo "This text will always appear." ; fi;
if [ false ] ; then echo "This text will always appear." ; fi;
if true      ; then echo "This text will always appear." ; fi;
if false     ; then echo "This text will never appear."  ; fi;

这类似于执行类似于回声“$foo”与回声“$foo”的操作。

使用test语句时,结果取决于使用的运算符。

if [ "$foo" = "$bar" ]   # true if the string values of $foo and $bar are equal
if [ "$foo" -eq "$bar" ] # true if the integer values of $foo and $bar are equal
if [ -f "$foo" ]         # true if $foo is a file that exists (by path)
if [ "$foo" ]            # true if $foo evaluates to a non-empty string
if foo                   # true if foo, as a command/subroutine,
                         # evaluates to true/success (returns 0 or null)

简而言之,如果您只想测试通过/失败(也称为“true”/“false”)的内容,那么将命令传递给您的if或

是的,我知道Bash中没有本机布尔类型,并且if[true在技术上是“命令”而不是“语句”;这只是一个非常基本的功能解释。

景英杰
2023-03-14

您正在运行参数为“false”的[/code>(又称test)命令,而不是运行该命令。由于“false”是一个非空字符串,test命令始终成功。要实际运行该命令,请删除该命令。

if false; then
   echo "True"
else
   echo "False"
fi
 类似资料:
  • 问题内容: 据我所知,使用或实例化对象分别返回或的新实例。具有 新标识 的新实例对象。 在我实际测试它之前,这对我来说是很清楚的,我注意到它实际上返回了而不是预期的: 如预期的那样,分别使用和创建对象时,也会表现出这种行为: 我可以在状态文档中找到唯一相关的信息: […]例如,return和return 。 如果未提供任何参数,则构造函数将创建一个新的空元组。 可以说,这不足以回答我的问题。 那么

  • 问题内容: 如果我这样做: 那又回来了。仅仅是因为在列表中。 但是,如果我这样做: 那又回来了。而等于: 为什么? 问题答案: 运算符优先级 2.x,3.x。的优先级低于的优先级。因此,它等效于: 这就是你想要的: 正如@Ben指出的那样:建议从不写作,更喜欢。前者使它看起来像一个函数调用,而它却是一个运算符,而不是一个函数。

  • 问题内容: 这怎么可能? 这是 您会看到它应该在这里: 到底是怎么回事? 问题答案: (此答案中的代码已针对Swift 3及更高版本进行了更新。) 显然,您的变量是a (描述文件路径)。要以字符串形式获取路径,请使用属性,而不是: 以字符串格式(包括方案等)返回URL 。 例:

  • 问题内容: 如果某些列返回FALSE,如何显示不同的值, 例如, COLUMN“ BASIC”返回FALSE,但我需要为用户显示YES或NO。情况为FALSE,请返回NO。 问题答案: 如果是varchar或bit,则处理NULL 或者如果只是一点点 编辑:

  • 问题内容: 我有一个发出AJAX调用的功能(通过jQuery)。在本节中,我有一个函数说: 但是,如果我这样称呼它: 第一个永远不会被调用。 如果将an 放入函数中,则为true,但在该函数返回之前不会为true 。 可以将回调函数传递给我的方法吗?喜欢: 问题答案: 是一个 回调 函数。它将由Ajax对象调用-异步!-操作完成时。您无法捕捉回调的结果,只有Ajax对象可以做到这一点。 您的函数-

  • 无论如何,这个公式是否可以修改为返回,例如:找到单词“哇”,并将该单词返回到单元格中,而不是true/false? 谢谢。