bash – 为什么等于运算符不工作,如果它不被空间包围?

我尝试了以下脚本
#!/bin/bash
var1="Test 1" 
var2="Test 2"
if [ "$var1"="$var2" ] 
  then 
    echo "Equal" 
  else 
    echo "Not equal"
fi

它给了我平等。虽然它应该打印不等于

只有当我插入空间=它按照预期工作

if [ "$var1" = "$var2" ]

并打印不相等

为什么会这样?为什么“$ var1”=“$ var2”与“$ var1”=“$ var2”不同?

此外,当我写了如果[“$ var1”=“$ var2”],它给了

line 4: [: Test 1=: unary operator expected

这是什么意思?它的期待一元操作符怎么样?

test(或[expr])是一个内置函数。像bash中的所有函数一样,您将其参数作为空格分隔的单词传递。

正如bash内置的手册页所示:“每个操作符和操作数必须是一个单独的参数。

这只是bash和大多数其他Unix shell的工作方式。

变量赋值不同。

在bash中,变量赋值具有语法:name = [value]。你不能把没有引用的空格放在=,因为bash不会将它解释为你打算的作业。 bash将大多数单词列表视为具有参数的命令。

例如。

# call the command or function 'abc' with '=def' as argument
abc =def

# call 'def' with the variable 'abc' set to the empty string
abc= def

# call 'ghi' with 'abc' set to 'def'
abc=def ghi

# set 'abc' to 'def ghi'
abc="def ghi"

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...