How to compare strings in Bash

bash, string

Solution

Using variables in if statements

if [ "$x" = "valid" ]; then
  echo "x has the value 'valid'"
fi

If you want to do something when they don't match, replace `=` with `!=`. You can read more about string operations and arithmetic operations in their respective documentation.

Why do we use quotes around `$x`?

You want the quotes around `$x`, because if it is empty, your Bash script encounters a syntax error as seen below:

if [ = "valid" ]; then

Non-standard use of `==` operator

Note that Bash allows `==` to be used for equality with `[`, but this is not standard.

Use either the first case wherein the quotes around `$x` are optional:

if [[ "$x" == "valid" ]]; then

or use the second case:

if [ "$x" = "valid" ]; then

Problem

How do I compare a variable to a string (and do something if they match)?

Original source

Related problems