Bash Shell - 文字列比較、文字列が含まれているかどうかを確認する

Bashシェルスクリプトで二つの文字列が等しいかどうかを比較する方法と、特定の文字列が含まれているかどうかを確認する方法を説明します。

1. 文字列同等比較

基本的には ==演算子で二つの文字列が等しいかどうかを比較することができます。

#!/bin/bash

str1="Hello"
str2="World"

if [ $str1 == $str2 ]
then
    echo "Equal"
else
    echo "Not Equal"
fi

Output:

$ bash example.sh
Not Equal

ところで、上記のコードは、任意の文字列の長さが0の場合、つまり、Emptyのときにエラーが発生することがあります。

たとえば、次のコードを実行させると、条件の unary operator expectedエラーが発生します。

#!/bin/bash

str1="Hello"
str2=""

if [ $str1 == $str2 ]
then
    echo "Equal"
else
    echo "Not Equal"
fi

Output:

$ bash example.sh
ex_string_com.sh: line 7: [: Hello: unary operator expected
Not Equal

1.1 安全に文字列を比較する

Emtpy Stringにエラーが発生していない、安全に文字列を比較するには、次のように変数を ""で包まばされます。その後、一方がEmptyでも [ "$str1" == "" ]のような形で比較して、問題が発生しません。

#!/bin/bash

str1="Hello"
str2=""

if [ "$str1" == "$str2" ]
then
    echo "Equal"
else
    echo "Not Equal"
fi

Output:

$ bash example.sh
Not Equal

1.2 変数が特定の文字列であることを確認する

変数が特定の文字列であることを確認するには、次のように変数の代わりに文字列と比較します。

#!/bin/bash

str1="Hello"

if [ "$str1" == "Hello" ]
then
    echo "Hello"
else
    echo "Not Hello"
fi

Output:

$ bash example.sh
Hello

2. 特定の文字列が含まれていることを確認する

下の二つの方法で文字列に特定の文字列が含まれているかどうかを確認することができます。

  • [[ "$STRING1" == *STRING2* ]]
  • [[ "$STRING1" =~ STRING2 ]]

2.1 例1

#!/bin/bash
str='This is the shell script example.'

if [[ "$str" == *shell* ]]; then
  echo "It contains 'shell'"
fi

Output:

$ bash example.sh
It contains 'shell'

2.1 例2

#!/bin/bash
str='This is the shell script example.'

if [[ "$str" =~ "shell" ]]; then
  echo "It contains 'shell'"
fi

Output:

$ bash example.sh
It contains 'shell'

3. 文字列が Empty であることを確認する

[ -z $STRING ]-zは、文字列の長さが0のときにTrueを返すテスト演算子です。

#!/bin/bash

str1=""

if [ -z $str1 ]
then
    echo "Empty string"
else
    echo "Not empty string"
fi

Output:

$ bash example.sh
Empty string

References

codechachaCopyright ©2019 codechacha