本文主要是介绍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无效
参考资料
《匈牙利命名法为何被淘汰_有意思的三种变量命名法:CamelCase, snake_case, spinal-case…》 ↩︎
《5 Basic REST API Design Guidelines》 ↩︎
《What is camelCase, PascalCase, kebab-case and snake_case?》 ↩︎
《Spinal Case to Camel Case》 ↩︎
这篇关于linux shell:将蛇形命名法(snake-case)变量字符串转为驼峰命名法(camel-case)变量字符串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!