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

其他回答

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

对于一个纯Bash版本,没有测试,但真的很难看,尝试:

if ( exit "${s1/*$s2*/0}" )2>/dev/null
then
   echo match
fi

解释:在()中打开一个额外的子shell。如果有匹配则以0退出,如果没有匹配则尝试以$s1退出,这将引发错误(丑陋)。此错误指向/dev/null

你需要空格:

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

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

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

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

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

对于a包含b,使用:

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

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

Bad:

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

好:

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

我建议这样做:

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

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

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

#!/bin/bash

or

#!/bin/sh

这是来源。