linux shell:将蛇形命名法(snake-case)变量字符串转为驼峰命名法(camel-case)变量字符串

Posted 10km

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux shell:将蛇形命名法(snake-case)变量字符串转为驼峰命名法(camel-case)变量字符串相关的知识,希望对你有一定的参考价值。

最近的工作有一个需求,需要利用linux shell脚本将_-作连字符的变量名字符串转为驼峰命名法(camel-case)的字符串,其实吧,'_'做连字符的命名方式有专门的名字,蛇形命名法(snake-case).'-'做连字符的命名方式也有专门的名字,脊柱命名法(spinal-case),也有叫kebab-case(kebab-烤肉串,也挺形象的).关于这些命名方式的由来本文未尾的参考资料1 2 3都有详细说明,我也是这次为了解决这个问题查资料才知道这些名词,以前孤陋寡闻了。

通过搜索引擎找到stackoverflow上找到了下面这个帖子4

与我的需求基本一样,是想把一个脊柱命名法(spinal-case)字符串转换为驼峰命名法(camel-case)的字符串。答主给了3个解决方案


对于上面三个方案我都做了测试,在linux(bash),win32/msys2下三个方案都能正确转换,但是在macOS(Big Sur 11.4)下第二,三方案可以正确转换,第一个方案(GNU sed)并不有效,不论是用zsh还是bash,如下图,我初步分析认为是我现在用的这个版本的sed不太对或某些开头没打开导致不能识别\\U控制码:

根据上面的解决方案整理一下,用来将以'-','_'连接的变量名字符串统一转为驼峰命名法的变量名,以下为三种解决方案,只是原方案的基础上增加了对'_'的支持,将'_'‘-’一样视为连接符

GNU sed(macOS下可能无效)

$ echo hello-world_tom | sed -r 's/(^|-|_)(\\w)/\\U\\2/g'
HelloWorldTom

Perl

$ echo hello-world_tom | perl -pe 's/(^|-|_)(\\w)/\\U\\2/g'
HelloWorldTom

Native Bash

$ to_camel_case() 
    IFS=-_ read -ra str <<<"$1"
    printf '%s' "$str[@]^"

$ to_camel_case "hello-world_tom"
HelloWorldTom

对于MacOS下zsh无效

参考资料


  1. 《匈牙利命名法为何被淘汰_有意思的三种变量命名法:CamelCase, snake_case, spinal-case…》 ↩︎

  2. 《5 Basic REST API Design Guidelines》 ↩︎

  3. 《What is camelCase, PascalCase, kebab-case and snake_case?》 ↩︎

  4. 《Spinal Case to Camel Case》 ↩︎

以上是关于linux shell:将蛇形命名法(snake-case)变量字符串转为驼峰命名法(camel-case)变量字符串的主要内容,如果未能解决你的问题,请参考以下文章

java:蛇形命名法格式(snake-case)字符串变量名转驼峰命名法格式(camel-case)

前端规范一(命名规范)

Python 为什么推荐蛇形命名法?

变量命名法

添加到列表中的Snake游戏问题

Rust 的函数以及 if 控制流