(jp) =
文字列の比較は、シェル スクリプト、ユーザー入力、または文字列データを操作する際の一般的なタスクです。 シェルでは、値が別の文字列に存在するかどうかを確認したり、2 つの文字列の長さが同じかどうかを調べたり、単語の先頭または末尾をテストしたり、その他の種類の比較を行う必要がある場合があります。 標準の Unix ツールには、文字列を比較するための多くのオプションが用意されていません。 従来の字句比較 (2 つの単語が同じ長さであるかどうかをチェックし、各文字を個別に比較するなど) は、コードで効率的に実装するのが難しく、Bash のような動的言語にはそれほど価値がありません。
この記事では、Bash で文字列を比較するさまざまな方法と、いくつかの関連コマンドについて説明します。
文字列比較演算子
bash if ステートメントで比較演算子を使用して、2 つの文字列を比較できます。 以下は、bash シェルで文字列を操作するための比較演算子のリストです。
| オペレーター | 詳細 |
|---|---|
| 文字列1 == 文字列2 | 両方の文字列が等しい場合に true を返します。 |
| string1 != 文字列 | 両方の文字列が等しくない場合に true を返します。 |
| 文字列 =~ 正規表現 | string1 を正規表現と比較し、真の一致を返す |
| -z 文字列 | 指定された文字列の長さがゼロ (0) の場合は true を返します |
| -n 文字列 | 指定された文字列の長さがゼロでない場合は true を返します |
ここで、上記の比較演算子について、例を挙げて 1 つずつ説明します。
Bash で 2 つの文字列を比較する (==)
2 つの文字列が等しいかどうかを確認する必要がある場合は、 == オペレーター。 これらの演算子は、左のオペランドと右のオペランドを比較し、両方が一致する場合に true を返します。
例で理解しましょう。 シェル スクリプトで、2 つの変数を文字列で初期化します。 次に、if ステートメントを使用して、== 演算子を使用して両方の文字列が等しいかどうかを比較します。
#!/usr/bin/env bash STR1=”TecAdmin” STR2=”TecAdmin” の場合 [ “$STR1” == “$STR2” ] then echo “両方の文字列が等しい” else echo “両方の文字列が等しくない” fi
|
#!/usr/bin/env bash STR1=「テックアドミン」 STR2=「テックアドミン」 もしも [ “$STR1” == “$STR2” ] それから エコー 「両方の文字列が等しい」 そうしないと エコー 「両方の文字列が等しくありません」 フィ |
上記のシェル スクリプトを bash シェルで実行し、結果を確認します。
Output:
Both strings are equal
ここで、両方の変数の値を異なる文字列に変更します。 次に、スクリプトを再度実行して結果を確認します。
2 つの文字列が等しくないことを確認する (!=)
両方の文字列が等しくないかどうかを確認する必要がある場合があります。 あなたが使用することができます != 2 つの文字列が等しくないかどうかをテストする演算子。 例で確認しましょう:
#!/usr/bin/env bash STR1=”TecAdmin” STR2=”HelloWorld” ##次の場合、両方の文字列が等しくないかどうかを確認します [ “$STR1” != “$STR2” ] then echo “True, 両方の文字列が等しくない” else echo “False, 両方の文字列が等しい” fi
|
#!/usr/bin/env bash STR1=「テックアドミン」 STR2=“こんにちは世界” ##両方の文字列が等しくないかどうかを確認します もしも [ “$STR1” != “$STR2” ] それから エコー 「確かに、両方の文字列は等しくありません」 そうしないと エコー False、両方の文字列が等しい フィ |
上記のシェル スクリプトを bash シェルで実行し、結果を確認します。
Output:
True, both strings are not equal
文字列を正規表現で比較する
文字列を bash スクリプトの正規表現と比較することもできます。 if ステートメントで正規表現による文字列比較を使用する場合は、常に次のように囲む必要があります。 [[ ]] 引用符。 以下の例は、特定の文字列で始まる文字列が変数に含まれているかどうかを確認するのに役立ちます。
#!/usr/bin/env bash STR=”TecAdmin” の場合 [[ “$STR” =~ ^Tec ]]then echo “はい、正規表現に一致します” else echo “正規表現に一致しません” fi
|
#!/usr/bin/env bash 力=「テックアドミン」 もしも [[ “$STR” =~ ^Tec ]] それから エコー 「はい、正規表現が一致しました」 そうしないと エコー 「正規表現が一致しません」 フィ |
Output:
Yes, the regular expression matches
別の例で確認してみましょう。 このスクリプトでは、ユーザーに数値の入力を求めます。 次に、入力値が数値かどうかを確認します。 0 から 9 までの数字を格納する数値コンテナー。
#!/usr/bin/env bash read -p “Input a number: ” VAR ## 入力値が数値かどうかを確認する [[ “$VAR” =~ ^[0-9]+$ ]]then echo “与えられた入力は数字です” else echo “申し訳ありませんが、入力は数字ではありません” fi
|
#!/usr/bin/env bash 読んだ –p “数字を入力してください: “ VAR ## 入力値が数値かチェック もしも [[ “$VAR” =~ ^[0–9]+$ ]] それから エコー 「入力は数値で与えてください」 そうしないと エコー 「申し訳ありませんが、入力は数値ではありません」 フィ |
上記の bash スクリプトを実行し、プロンプトが表示されたら入力します。
First run:
Input a number: 12
Given input is a number
このスクリプトを再度実行しますが、今回は数値以外の値を入力して結果を確認します。
Second run:
Input a number: 1234a
Sorry, input is not a number
文字列が空かどうかを確認する
シェル スクリプトでユーザー入力を受け取るときは、入力文字列が空でないことを確認することが重要です。 あなたが使用することができます -z 戻る 真実 文字列が空の場合。
#!/usr/bin/env bash read -p “何でも入力してください: ” VAR if [[ -z $VAR ]]; then echo “Empty string” でなければ echo “You type: $VAR” fi
|
#!/usr/bin/env bash 読んだ –p “何でも入力してください: “ VAR もしも [[ –z $VAR ]]; それから エコー 「空の文字列」 そうしないと エコー 「入力: $VAR」 フィ |
上記のシェル スクリプトを bash シェルで実行し、ユーザー入力を求めるプロンプトが表示されたら、Enter キーを押します。
First run:
Type anything:
Empty string
上記のスクリプトを再度実行し、プロンプトが表示されたら何か入力します。
Second run:
Type anything: TecAdmin
You type: TecAdmin
結論
このチュートリアルでは、bash スクリプトでの文字列比較について説明しました。 文字列が空かどうかを確認することもできます。 入力値が数値かどうかを確認する例も示します。