在bash中尝试整数相等时,"未找到命令"

Mar*_*ret 11 bash

好吧,对于那些花费更多时间使用bash而不是我的人来说,这可能是非常明显的.

我正在尝试运行此代码:

#!/bin/bash

if ["1" -eq "2"] 
then
    echo "True"
else
    echo "False"
fi
Run Code Online (Sandbox Code Playgroud)

但是当我执行文件时,它会发回

./test.sh: line 3: 1: command not found
False
Run Code Online (Sandbox Code Playgroud)

必须有一些我不知道的重要事项.我看到人们在括号后使用分号,这似乎没有任何区别......:S

Sie*_*geX 26

您需要在[之前和之后添加空格,]以便:

if [ "1" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)

但是,这种方式已被弃用,更好的使用方法是:

#!/bin/bash

if ((1 == 2)) 
then
    echo "True"
else
    echo "False"
fi
Run Code Online (Sandbox Code Playgroud)


Rag*_*geZ 9

yep eq仅用于算术比较.

用于字符串比较,你必须使用 =

#!/bin/bash

if [ "1" = "2" ] 
then
    echo "True"
else
    echo "False"
fi
Run Code Online (Sandbox Code Playgroud)

另外,你需要在括号周围留出一些空间.

  • 空间!我知道它会变小.人们抱怨*python*使用重要的空白.:S (5认同)
  • 数字是shell中的字符串.引号并没有改变它们是数字的事实.`[10 -gt 2]`是真的.*另一方面,比较*可以是字符串或数字.你已经证明了一个例子.其他特定于支持`[[`:string:`[["10">"2"]]`(false)或`[["10"-gt"2"]]`(true)的shell.同样,这不是引用差异的报价. (3认同)

Mic*_*urr 9

尝试在括号周围添加空格:

if [ "1" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)