• HelloWorld → hello_world
  • WMClass → wm_class

このように、キャメルケース(PascalCase含む)をスネークケースに変換

to_snake_case() {
  local input="$1"
  echo "$input" \
    | sed -E 's/([A-Z]+)([A-Z][a-z])/\1_\2/g' \
    | sed -E 's/([a-z0-9])([A-Z])/\1_\2/g' \
    | tr 'A-Z' 'a-z'
}

# テスト
for s in HelloWorld WMClass URLLoader MyXMLParser FooBAR BazQux; do
  echo "$s -> $(to_snake_case "$s")"
done
# 出力例
HelloWorld -> hello world
POSIXBased -> posix based
XMLHTTPRequest -> xml http request
URLLoader -> url loader
FooBAR -> foo bar
BazQux -> baz qux