How do I compare two string variables in an 'if' statement in Bash?

bash, if-statement, scripting

Solution

For string equality comparison, use:

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

For string does NOT equal comparison, use:

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

For the `a` contains `b`, use:

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

(and make sure to add spaces between the symbols):

Bad:

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

Good:

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

Problem

I'm trying to get an `if` statement to work in Bash (using Ubuntu): ``` #!/bin/bash s1="hi" s2="hi" if ["$s1" == "$s2"] then echo match fi ``` I've tried various forms of the `if` statement, using `[["$s1" == "$s2"]]`, with and without quotes, using `=`, `==` and `-eq`, but I still get the following error: [hi: command not found I've looked at various sites and tutorials and copied those, but it doesn't work - what am I doing wrong? Eventually, I want to say if `$s1` contains `$s2`, so how can I do that? I did just work out the spaces bit... :/ How do I say contains? I tried ``` if [[ "$s1" == "*$s2*" ]] ``` but it didn't work.

Original source

Related problems