[個人的なメモ] シェルは 2 つの文字列が等しいかどうかを比較します

2 つの文字列が等しいかどうかを比較する方法は次のとおりです。

if [ "$test"x = "test"x ]; それから

ここにはいくつかの重要なポイントがあります。

1 単一の等号を使用します

2 等号の両側にスペースがあることに注意してください。これは Unix シェルの要件です。

3 「test」x の末尾にある x に注目してください。これは仕様です。なぜなら、test"x の末尾に x がある場合、これは仕様によるものです。t e s t " x末尾のx は意図的に配置されています。testが空の場合上記の式は x = testx になり、明らかに等しくありませ場合ん。そして、x がない

二項比較演算子、変数の比較、または数値の比較。数値と文字列の違いに注意してください。

整数比較

-eq は、次のように等しいです。 if [ " a " − eq " a" -eq "e q " b" ]

-ne は等しくありません。例: if [ " a " − ne " a" -ne "n e " b " ]

-gt より大きい (例: if [ " a " − gt " a" -gt ")g t " b" ]

-ge は以上です。例: if [ " a " − ge " a" -ge "g e " b" ]

-lt は次のように小さいです: if [ " a " − lt " a" -lt "l t " b" ]

-le は以下のようになります。 if [ " a " − le " a" -le "l e " b" ]

より大きい (二重括弧が必要)、例: ((" a " > " a" > ">" b"))
>= 以上 (二重括弧が必要)、例: (("a " >= " a" >= ")>=" b"))

AWK は小規模なデータの比較に使用できます

文字列比較

= は以下と等しい: if [ " a " = " a" = "= b」]

== は次のように等しい: if [ " a " = = " a" == "==" b"]、= と同等

注: [[]] と [] の == 関数の動作は次のように異なります。

1 [[ KaTeX 解析エラー: 'EOF' が予期され、位置 12 で '#' を取得しました: a == z* ]] #̲ は、 a が "z" で始まる場合 (パターン一致) に true になります。

2 [[ KaTeX 解析エラー: 'EOF' が予期され、位置 14 で '#' を取得しました: a == "z*" ]] #̲ a が z* と等しい場合 (文字一致)、結果は true になります

3

4 [ $a == z* ] # ファイルのグロビングと単語の分割が発生します

5 [ " KaTeX 解析エラー: 'EOF' が予期され、位置 14 で '#' が取得されました: a" == "z*" ] #̲ a が z* と等しい場合 (文字一致)、結果は true になります

ファイルのグロビングとは、「*.c」や ~ などのファイルの短縮方法です。

ただし、ファイルのグロビングは厳密な正規表現ではありませんが、ほとんどの場合、構造は似ています。

!= 等しくありません。例: if [ " a " ! = " a" != "= b」]

この演算子は、[[]] 構造でパターン マッチングを使用します。

「より大きい」を ASCII アルファベット順に並べたものです。例:

if [[ " a " > " a" > "> b」]]

if [ " a " " a" \> " b」]

注意: [] 構造では「>」をエスケープする必要があります。
詳細については、例26-11を参照して、この演算子の適用例を参照してください。
-z 文字列は「null」です。つまり、長さは次のとおりです。 0.
-n 文字列は "null" ではありません
注:
-n を使用して [] 構造内でテストする場合は、変数を引用符で囲むために "" を使用する必要があります。使用するには、"" ではない文字列を使用してください。 -z または""で囲まれていない文字列そのものは、[]構造の中に入れてください。これは一般に機能しますが
、安全ではないため、文字列をテストするには "" を使用することをお勧めします。

元の関連情報: https://blog.csdn.net/weixin_35408656/article/details/113682373

おすすめ

転載: blog.csdn.net/m0_49303490/article/details/128160377