ASCII コード表で、大文字 Z と小文字 a の間には [
\
]
^
_
`
の 6つの記号が含まれている。正規表現で [A-z]
とか指定してしまうと、アルファベットだけではなくこれらの記号も含まれてしまうことになる。
なんでこれを見てたかというと、それが原因となった脆弱性が shell-quote - npm という npm パッケージで出ていたからなのだった (修正バージョンはすでに出ている) https://nvd.nist.gov/vuln/detail/CVE-2021-42740 。バッククオートが含まれているのでコマンドインジェクションということだった。
ちなみに bash ではこれで確認できて便利、と思ったけどバックスラッシュが出てなかった。
$ echo {Z..a} Z [ ] ^ _ ` a
ASCII コードで大文字にすぐ続けて小文字にしなかったの、 16進数でキリよく 0x41 を A
、 0x61 を a
にしたかったからなんだろうか……とか考えていた。
(追記) 1ビットだけ変えれば大文字小文字を変換できて便利ということかもと教えてもらった、なるほど