linux shell标题案例

时间:2011-08-06 21:35:21

标签: linux shell variables

我在写一个shell脚本并有一个这样的变量:something-that-is-hyphenated

我需要在脚本中的各个点使用它:

something-that-is-hyphenatedsomethingthatishyphenatedSomethingThatIsHyphenated

我已设法使用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 liner
echo a-hyphenated-string | sed -E "s/(^|-)([a-z])/\u\2/g"

5 个答案:

答案 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='- '