ファイルには2つの状況がありますa.txt
。
ケース1:
V1=last #case insensitive
V2=Last #case insensitive
ケース2:
V1=last #case insensitive
V2=LastNum #case insensitive
与えられた時間
V1
に両方が異なることを確認する必要があります。そしてどんな番号も割り当てることができます。V2
V1
V2
以下のコードを使用していますが、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