我在写一个shell脚本并有一个这样的变量:something-that-is-hyphenated
。
我需要在脚本中的各个点使用它:
something-that-is-hyphenated
,somethingthatishyphenated
,SomethingThatIsHyphenated
我已设法使用somethingthatishyphenated
删除-
,将其更改为sed "s/-//g"
。
我确信有一种更简单的方法,而且还需要知道如何获得驼峰式的版本。
编辑:工作函数源自@Michał的答案
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 one linerecho a-hyphenated-string | sed -E "s/(^|-)([a-z])/\u\2/g"
答案 0 :(得分:4)
纯粹的基础:
var0=something-that-is-hyphenated
var1=(${var0//-/ })
var2=${var1[*]^}
var3=${var2// /}
echo $var3
SomethingThatIsHyphenated
第1行是微不足道的
第2行是replaceAll或's/-/ /g'
的基础,包含在parens中,用于构建数组
第3行使用${foo^}
,表示大写(${foo,}
表示'小写'[注意,^
如何指向,
指向下),但是每个如果您愿意,我们会使用${foo[*]}
(或${foo[@]}
来解决整个数组的字母。)
第4行再次取代所有:空白,没有任何内容
第5行再次是微不足道的。
答案 1 :(得分:4)
GNU sed one-liner
echo something-that-is-hyphenated |
sed -e 's/-\([a-z]\)/\u\1/g' -e 's/^[a-z]/\u&/'
替换字符串中的 \u
记录在the sed manual。
答案 2 :(得分:1)
您可以定义一个功能:
hypenToCamel() {
tr '-' '\n' | awk '{printf "%s%s", toupper(substr($0,0,1)), substr($0,2)}'
}
CAMEL=$(echo something-that-is-hyphenated | hypenToCamel)
echo $CAMEL
答案 3 :(得分:0)
在外壳中你会陷入困境:
aa="aaa-aaa-bbb-bbb" echo " $aa" | sed -e 's/--*/ /g' -e 's/ a/A/g' -e 's/ b/B/g' ... -e 's/ *//g'
注意回声中精心放置的空间和最后一个-e中的双重空格。
我将其作为练习来完成代码。
在perl中,作为单行shell命令更容易:
perl -e 'print map{ $a = ucfirst; $a =~ s/ +//g; $a} split( /-+/, $ARGV[0] ), "\n"' $aa
答案 4 :(得分:0)
对于记录,这里是纯粹的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='- '
。