$ echo ABC | awk '$0 ~ /^[a-b]/'
ABC
$ echo ABC | awk '$0 ~ /^[a-a]/'
$ echo ABC | awk '$0 ~ /^a/'
$
望むより。/[a-b]/
キャプチャしますA
が、キャプチャしないことがあり/[a-a]/
ます/a/
。なぜ?
ベストアンサー1
私はこれが「ロケール」の問題だと思います。
私のロケールit_ITの次のコードスニペット
if [[ a < A ]]; then
echo "a < A"
elif [[ a > A ]]; then
echo "a > A"
else
echo "a = A"
fi
if [[ b < A ]]; then
echo "b < A"
elif [[ b > A ]]; then
echo "b > A"
else
echo "b = A"
fi
プログラム
a < A
b > A
A
だから(驚くべきことに)a
との間にあるので、b
範囲内にあります。
実行しよう
echo ABC | LC_COLLATE=C awk '$0 ~ /^[a-b]/'
編集する
次のコマンドは、対応するロケールの組み合わせ順序を表示します。
echo $(LC_COLLATE=C printf '%s\n' {A..z} | sort)
マイコンピュータの出力は次のとおりです。
` ^ _ [ ] a A b B c C d D e E f F g G h H i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y z Z
(bashのマニュアルページでは理解できません配列表現ロケールの組み合わせ順に展開するかどうかはそうではありません。