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