linux shell标题大小写

我正在弄一个shell脚本,并有一个像这样的variables: something-that-is-hyphenated

我需要在脚本的各个方面使用它:

something-that-is-hyphenatedsomethingthatishyphenated something-that-is-hyphenatedsomethingthatishyphenated something-that-is-hyphenated

我已经设法将其更改为通过剥离-使用sed "s/-//g"sed "s/-//g"

我相信有一个更简单的方法,而且,也需要知道如何获得骆驼套装版本。

编辑:从@Michał的答案派生的工作function

 function hyphenToCamel { tr '-' '\n' | awk '{printf "%s%s", toupper(substr($0,1,1)), substr($0,2)}' } CAMEL=$(echo something-that-is-hyphenated | hyphenToCamel) echo $CAMEL 

编辑:最后,感谢@glenn sed一个class轮

 echo a-hyphenated-string | sed -E "s/(^|-)([az])/\u\2/g" 

Solutions Collecting From Web of "linux shell标题大小写"

一个GNU sed单线程

 echo something-that-is-hyphenated | sed -e 's/-\([az]\)/\u\1/g' -e 's/^[az]/\u&/' 

在替换字符串中的文件记录在sed手册中 。

纯粹的抨击:

 var0=something-that-is-hyphenated var1=(${var0//-/ }) var2=${var1[*]^} var3=${var2// /} echo $var3 SomethingThatIsHyphenated 

第1行是微不足道的。
第2行是replaceAll或b 's/-/ /g' ,用parens包起来构建一个数组。
第3行使用${foo^} ,这意味着大写字母(而${foo,}将意味着'小写字母'[注意,如何^指向上,而下指向]),但是要对单词的每个首字母进行操作,整个数组用${foo[*]} (或者${foo[@]} ,如果你愿意的话)。
第4行再次是一个全部替换:没有任何东西的空白。
第五行又是微不足道的。

你可以定义一个函数:

 hypenToCamel() { tr '-' '\n' | awk '{printf "%s%s", toupper(substr($0,0,1)), substr($0,2)}' } CAMEL=$(echo something-that-is-hyphenated | hypenToCamel) echo $CAMEL 

在外壳中,你被困在一个杂乱的地方:

    AA = “AAA-AAA-BBB-BBB”
   回声“$ aa”|  sed -e's /  -  * / / g'-e's / a / A / g'-e's / b / B / g'... -e's / * // g'

注意echo中的精心摆放的空间和最后-e中的双倍空间。

我把它作为练习来完成代码。

在perl中,作为一行命令的shell命令更简单一些:

 perl -e'print map {$ a = ucfirst;  $ a =〜s / + // g;  $ a} split(/  -  + /,$ ARGV [0]),“\ n”'$ aa

对于记录,这是一个纯粹的Bash 安全方法(不受路径名扩展) – 使用Bash≥4:

 var0=something-that-is-hyphenated IFS=- read -r -d '' -a var1 < <(printf '%s\0' "${var0,,}") printf '%s' "${var1[@]^}" 

这(安全地)在连字符处将var0的小写扩展分割成数组var1每个分割部分。 然后我们使用^参数展开来大写这个数组的字段的第一个字符,并将它们连接起来。

如果您的变量也可能包含空格,并且您也想要对其执行操作,请将IFS=-更改为IFS='- '