if条件で大文字と小文字を区別しないパターンマッチング

if条件で大文字と小文字を区別しないパターンマッチング

ファイルには2つの状況がありますa.txt

ケース1:

V1=last  #case insensitive
V2=Last  #case insensitive

ケース2:

V1=last     #case insensitive
V2=LastNum  #case insensitive

与えられた時間 V1に両方が異なることを確認する必要があります。そしてどんな番号も割り当てることができます。V2V1V2

以下のコードを使用していますが、2番目のケースであるwhenとはV1=last失敗しますV2=LastNum。ケース2の予想出力は次のとおりですNot Same

if [[ ( "${V1}" =~ [Ll][Aa][Ss][Tt] && "${V2}" =~ [Ll][Aa][Ss][Tt]$ ) || ( "${V1}" == "${V2}" ) ]];then
  echo "V1 and V2 are same"
else
  echo "Not Same"
fi

どんな助けでも大歓迎です!よろしくお願いします!

ベストアンサー1

Bashを使用している場合は、拡張機能を使用して小文字にすることが${var,,}でき$varます。

V1=foO V2=Foo
if [[ "${V1,,}" == "${V2,,}" ]]; then
    printf '%s\n' "'$V1' and '$V2' are the same in lowercase";
fi

または以下を使用してくださいnocasematch

shopt -s nocasematch
V1=foO V2=Foo
if [[ "$V1" == "$V2" ]]; then
    printf '%s\n' "'$V1' and '$V2' are the same apart from case" ;
fi

これがASCII以外の文字でも機能するかどうかはわかりません。一般に、大文字と小文字の比較と大文字と小文字を区別しない一致の問題は少しトリッキーで、ロケールによって異なります(トルコ語)。少しずつ、少しずつ一般的な例です。)しかし、持っているものが発音区別符号なしでAからZまでの文字と英語互換ロケールまたはsetだけならうまくいくでしょうLC_ALL=C


Zshでは、extendedglobこのオプションを有効にすると、(#i)$V2右側で次のものが使用できます。

setopt extendedglob
V1=foO V2=Foo
if [[ "$V1" == (#i)"$V2" ]]; then
    printf '%s\n' "'$V1' and '$V2' are the same apart from case" ;
fi

おすすめ記事