- 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