我试图得到一个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

^表示你需要留下的空白。

其他回答

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

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

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

你应该注意在符号'['和双引号之间留下一个空格,其中变量包含:

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

^表示你需要留下的空白。

Use:

#!/bin/bash

s1="hi"
s2="hi"

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

在里面添加额外的字符串会更安全。

你也可以使用另一种单行命令的符号:

[ "x$s1" == "x$s2" ] && echo match

我建议:

#!/bin/bash

s1="hi"
s2="hi"

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

没有双引号,只有一个等号。