如何在bash的if-else中使用变量?

如何在bash的if-else中使用变量?,bash,Bash,我在windows上安装了git bash,并尝试编写一些简单的脚本。到目前为止,有一件事我还没有弄明白,那就是简单的数学和比较。我现在需要的是一个随机布尔值: #!/usr/bin/env bash condition=$(($(($RANDOM%2)) == 1)) if $condition; then echo "a" else echo "b" fi 我没有找到命令。看起来git bash缺少比较运算符,==,!=-无论我怎么尝试,eq,-lt,-gt都不起作用

我在windows上安装了git bash,并尝试编写一些简单的脚本。到目前为止,有一件事我还没有弄明白,那就是简单的数学和比较。我现在需要的是一个随机布尔值:

#!/usr/bin/env bash

condition=$(($(($RANDOM%2)) == 1))

if $condition; then
    echo "a"
else
    echo "b"
fi


我没有找到
命令
。看起来git bash缺少比较运算符,==,!=-无论我怎么尝试,eq,-lt,-gt都不起作用。我在所有的例子中都发现了这些。有什么想法吗?

你可以这样使用它:

#!/usr/bin/env bash

condition=$(((RANDOM % 2) == 1))

if ((condition)); then
    echo "a"
else
    echo "b"
fi
请注意,您也可以将变量赋值缩短为:

condition=$((RANDOM % 2))

接线员没有失踪。问题在于
条件
变量的内容不是命令,而
if
将命令作为检查的对象。(anubhava的答案进入了一个算术上下文,在这个上下文中,你可以使用算术运算作为命令;你也可以做一些事情,比如说,
如果[“$condition”-eq 1];然后
,因为
[
也是一个命令)。它的名字是,没有什么特别之处;它是一个包含Git、Bash和一系列其他标准Unix/Linux工具的包,这些工具移植到Windows(在。太棒了,谢谢。当你懒得阅读手册并尝试从教程中学习时,就会发生这种情况:Dy,我想同时我可以缩短它,谢谢。我只是不确定类型转换有多自动没有类型转换。你可以做数学运算,但结果存储为字符串;再次在算术上下文中参考它,我t每次都会从字符串转换回整数(也有例外;可以使用
declare-i
生成变量的本机形式算术,但这更像是旁注)@inf3rno Shell语法和语义比大多数语言更依赖于上下文,因此这可能会让您感到困惑。例如,根据上下文
a=b
可能意味着“使用参数'='和'b'运行命令'a';或者可能意味着“将'a'和'b'作为字符串进行比较”;或者可能意味着”弄清楚数字
b
代表什么(可能将其视为变量名),并将变量
a
设置为它”。另一件让人感到困惑的事情是,在shell语法中,添加或删除它们可以完全改变某个内容的含义。