linux外壳标题案例
我正在编写一个shell脚本,并且有这样一个变量:linux外壳标题案例,linux,shell,variables,Linux,Shell,Variables,我正在编写一个shell脚本,并且有这样一个变量:一些连字符的东西 我需要在脚本的各个点中使用它,如下所示: 连字符的某物,连字符的某物,连字符的某物 通过使用sed“s/-//g”剥离-,我成功地将其更改为一些连字符的内容 我相信有一个更简单的方法,而且,需要知道如何获得骆驼壳版本 编辑:源自@Michał答案的工作函数 function hyphenToCamel { tr '-' '\n' | awk '{printf "%s%s", toupper(substr($0,1,1))
一些连字符的东西
我需要在脚本的各个点中使用它,如下所示:
连字符的某物
,连字符的某物
,连字符的某物
通过使用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一行
echo a-hyphenated-string | sed -E "s/(^|-)([a-z])/\u\2/g"
在壳中,你被困在混乱中:
aa="aaa-aaa-bbb-bbb"
echo " $aa" | sed -e 's/--*/ /g' -e 's/ a/A/g' -e 's/ b/B/g' ... -e 's/ *//g'
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
perl-e'print map{$a=ucfirst;$a=~s/+//g;$a}split(/-+/,$ARGV[0]),“\n”'$aa
您可以定义一个函数:
hypenToCamel() {
tr '-' '\n' | awk '{printf "%s%s", toupper(substr($0,0,1)), substr($0,2)}'
}
CAMEL=$(echo something-that-is-hyphenated | hypenToCamel)
echo $CAMEL
纯粹的巴什主义:
var0=something-that-is-hyphenated
var1=(${var0//-/ })
var2=${var1[*]^}
var3=${var2// /}
echo $var3
SomethingThatIsHyphenated
第1行很简单。
第2行是replaceAll或的//-//g'
的bashim,用parens包装以构建数组。
第3行使用了${foo^}
,这意味着大写(而${foo,}
将意味着“小写”[注意,^
如何向上指向,而,
向下指向]),但是为了对单词的每个第一个字母进行操作,我们使用${foo[*]}
(或者${foo[]}
,如果您愿意的话)。
第4行同样是“全部替换”:空白,无任何内容。
第5行同样是琐碎的 GNU使用的一个班轮
echo something-that-is-hyphenated |
sed -e 's/-\([a-z]\)/\u\1/g' -e 's/^[a-z]/\u&/'
替换字符串中的\u
记录在中。对于记录,这里有一个纯Bash安全方法(不受路径名扩展的约束)-使用Bash≥4:
var0=something-that-is-hyphenated
IFS=- read -r -d '' -a var1 < <(printf '%s\0' "${var0,,}")
printf '%s' "${var1[@]^}"
var0=连字符的东西
IFS=-read-r-d''-a var1<看看这个-有什么原因不能只使用相同的变量名吗?你给脚本增加了很多不必要的复杂性。我正在构建Tianium项目文件,需要使用我的项目名称作为应用程序名称,项目目录,但com.domain.myprojectname作为应用程序id,后来com.domain.myprojectname/.MyProjectNameActivity在android设备上的adb外壳中启动了它。不太管用-但通过一些编辑(现在添加到我的问题中)让它工作只是toupper
中的substr
需要是substr($0,1,1)
如果你在bash中,请注意${var//string/replacement}
。您甚至可以在纯Bash中编写CamelCase转换代码,尽管这会有点繁琐。或者干脆回显a-hyphenated-string | sed-E“s/(^ |-)([a-z])/\u\2/g”
。很棒。我找不到man sed
中记录的功能。谢谢-这正是我要找的。整洁!借用(带有adapations)不错,但缺少一些健康的引用(因此需要扩展路径名)。我建议:var0=用连字符连接的东西;IFS=-read-r-d''-a var1<@gniourf\u gniourf:你能更具体地说明它在哪里需要引号,以及它如何进行路径名扩展吗,可能有一个例子?之后你不需要重置IFS吗?@userunknown:下面是它的中断方式:var0=hello-*-user unknownn
(从包含一些文件的目录中执行)。您无法修复此行为(除了不鼓励使用set-f
)。关于我的解决方案:不,我不需要重置IFS
。它只为命令read
设置(类似于环境变量)是的,如果变量名中有星号,但示例中只包含字母和连字符,因此这是一个非常广泛的假设。