我试图得到一个if语句工作在Bash(使用Ubuntu):

#!/bin/bash

s1="hi"
s2="hi"

if ["$s1" == "$s2"]
then
  echo match
fi

我尝试了各种形式的if语句,使用[["$s1" == "$s2"]],带引号和不带引号,使用=,==和-eq,但我仍然得到以下错误:

[hi:命令未找到。

我看了各种各样的网站和教程,并复制了它们,但它不起作用——我做错了什么?

最后,我想说如果$s1包含$s2,我该怎么做呢?

我刚刚算出了空格…:/我怎么说包含?

我试着

if [[ "$s1" == "*$s2*" ]]

但这并没有起作用。


当前回答

$ if [ "$s1" == "$s2" ]; then echo match; fi
match
$ test "s1" = "s2" ;echo match
match
$

其他回答

Bash 4+示例。注意:当单词中包含空格时,不使用引号会导致问题。在我看来,总是引用Bash。

下面是一些Bash 4+的例子:

例1,在字符串中检查'yes'(不区分大小写):

if [[ "${str,,}" == *"yes"* ]] ;then

例2,检查字符串中的'yes'(不区分大小写):

if [[ "$(echo "$str" | tr '[:upper:]' '[:lower:]')" == *"yes"* ]] ;then

例3,检查字符串中的'yes'(区分大小写):

 if [[ "${str}" == *"yes"* ]] ;then

例4,检查字符串中的'yes'(区分大小写):

 if [[ "${str}" =~ "yes" ]] ;then

例5,精确匹配(区分大小写):

 if [[ "${str}" == "yes" ]] ;then

例6,精确匹配(不区分大小写):

 if [[ "${str,,}" == "yes" ]] ;then

例7,精确匹配:

 if [ "$a" = "$b" ] ;then

我建议这样做:

if [ "$a" = "$b" ]

注意左/右括号和变量之间的空白,以及'='号周围的空白。

另外,要注意脚本头。用不使用是两码事

#!/bin/bash

or

#!/bin/sh

这是来源。

对于字符串相等性比较,使用:

if [[ "$s1" == "$s2" ]]

对于字符串不等于比较,使用:

if [[ "$s1" != "$s2" ]]

对于a包含b,使用:

if [[ $s1 == *"$s2"* ]]

(并确保在符号之间添加空格):

Bad:

if [["$s1" == "$s2"]]

好:

if [[ "$s1" == "$s2" ]]

这与其说是回答,不如说是澄清!是的,线索在错误消息中:

[hi:命令未找到。

这表明你的“hi”已经连接到“[”。

与传统编程语言不同的是,在Bash中,“[”是一个命令,就像更明显的“ls”一样——它不会因为是符号而被特殊对待,因此“[”和(被替换)在你的问题中紧挨着的“$s1”被连接(这对Bash是正确的),然后它尝试在该位置找到一个命令:[hi - Bash不知道。

在C语言和其他一些语言中,“[”将被视为不同的“字符类”,并与下面的“hi”分离。

因此你需要在开头“[”后面加一个空格。

我现在无法访问Linux机器,但[实际上是一个程序(也是一个Bash内置程序),所以我认为必须在[和第一个参数之间放一个空格。

还要注意,字符串相等操作符似乎是一个=。