foo=“bar”; //大写第一个字符 echo$foo;
17个答案
foo=巴 echo“${foo ^}”
酒吧
-
5 -
71 @CMCDragonkai:要使第一个字母小写,请使用 “${foo,}” 。要将所有字母小写,请使用 “${foo,,}” 。若要大写所有字母,请使用 “${foo^^}” . – 史蒂夫 评论 2015年12月16日21:37 -
1 -
26 -
4
foo=“$(tr'[:lower:]''[:upper:]'<<${foo:0:1})${foo:1}”
-
4 尽管这个答案比得分最高的答案更复杂,但实际上它确实做到了这一点:“变量中的大写第一个字符”。 得分最高的答案没有这样的结果。 看起来简单的答案比正确的答案更受欢迎? 评论 2016年2月26日15:48 -
18 @KrzysztofJabłoński:事实上,下面的“最佳得分答案”将产生与Bash 4下的答案相同的结果。 这个答案包含调用子shell(另一个shell)的开销、调用“tr”实用程序(另一进程,而不是Bash)的开销以及使用here-doc/string(临时文件创建)的开销,与得分最高的答案相比,它使用了两个替换。 如果您必须编写遗留代码,请考虑使用函数而不是子shell。 – 史蒂夫 评论 2016年4月13日23:57 -
三 这个答案假设输入都是小写。 此变量没有假设:$(tr“[:lower:]”“[:upper:]”<<${foo:0:1})$(tr'[:upper:]”“[:lower:]'<<$}foo:1} – 伊泰·汉斯基 评论 2016年7月6日7:18 -
7 @ItaiHanski OP没有指定其余字符应该发生什么,只指定了第一个字符。 假设他们想改变 不退出Comel 进入之内 不退出竞标 。您的变体有副作用,或者强制将其余部分小写,但代价是子shell和tr进程的数量增加了一倍。 – 杰西·奇索姆 评论 2016年7月27日20:54 -
三
echo“$(echo”$foo“|sed的/.*/\u&/')”
酒吧
-
13 -
2 @大众货车 brew安装coreutils gnu-sed 并按照说明使用不带前缀的命令 克 。值得一提的是,自从获得GNU版本以来,我从未想过运行这些命令的OSX版本。 – 院长 评论 2014年8月26日19:01 -
三 -
6 -
6
foo='一二三' foo=“${foo^}” 回声$foo
O(运行) ne二三
foo=“一二三” foo=($foo)#不带引号 foo=“${foo[@]^}” echo$foo
O(运行) 氖 T型 我 T型 三
#!/ 垃圾桶/垃圾桶 string=“abcd” first=`echo$string|cut-c1|tr[a-z][a-z]` 秒=`echo$string|cut-c2-` echo$第一个$second
foo=“bar”; echo$foo|awk'{$1=toupper(子($1,0,1))子($1.2)}1' #或 echo${foo^} #或 echo$foo|head-c1|tr[a-z][a-z]; echo$foo|tail-c+2 #或 echo${foo:1}|sed-e的/^/ \B和/'
#首先,获取第一个字符。 fl=${foo:0:1} #安全检查:必须是字母:)。 如果[[${fl}==[a-z]]]; 然后 #现在,使用printf(builtin)获取其八进制值。 ord=$(打印“%o”“${fl}”) #有趣的事实:[a-z]映射到0141..0172。 [A-Z]为0101..0132。 #我们可以使用十进制“-40”来获得预期结果! ord=$((ord-40)) #最后,将新值映射回字符。 fl=$(打印“%b”\“${ord}”) fi(菲涅耳) echo“${fl}${foo:1}”
-
-
2 -
-
FooBar=巴兹 echo${FooBar^^${Foo Bar:0:1}} =>巴兹
FooBar=巴兹 echo${FooBar^^${Foo Bar:1:1}} =>bAz(蓝色)
FooBar=巴兹 echo${FooBar^^${FooBar:2:2}} =>baZ
Cyberciti.biz: 8.将大写转换为小写,反之亦然 Opensource.com: Bash中的参数扩展简介
对于*php中的f; 执行mv“$f”“$(\sed的/.*/\u&/'<<“$f“)”; 完成
-
7
#!/ 垃圾桶/桶 printf“$1”|剪切-c1-z | tr-d'\0'| tr[:下:][:上:] printf“$1”|剪切-c2-
$upper_first.sh foo 富 $
#!/ 垃圾桶/桶 函数upper_first() { printf“$1”|剪切-c1-z | tr-d'\0'| tr[:下:][:上:] printf“$1”|剪切-c2- } old=“foo” new=“$(upper_first”$old“)” echo“$新”
v=“foo[Bar]” 打印f“%s”“${v%”${v#?}“}”|tr'[:下部:]'[:上部:]'&&printf“%s“${v#?}” ==>Foo[酒吧]
第一个字母到下一个字母(){ str=“” 空格=“” 对于我来说$@ 做 if[-z$(echo$i|grep“the \ | of \ | with”)] 然后 str=$str“$(echo${i:0:1}|tr‘[A-Z]’‘[A-Z]’)${i:1}$space” 其他的 str=$str${i}$space fi(菲涅耳) 完成 echo$str } 第一个字母到上-xc(){ v-first letter to upper | xclip-选择剪贴板 } 第一个字母到上(){ str=“” 空格=“” 对于我来说$@ 做 if[-z$(echo$i|grep“the \ | of \ | with”)] 然后 str=$str“$(echo${i:0:1}|tr'[a-z]'[a-z]')${i:1}$空格” 其他的 str=$str${i}$space fi(菲涅耳) 完成 echo$str }
declare-u foo#为变量赋值时,所有小写字符都转换为大写。 foo=巴 echo$foo 酒吧
declare-l foo#为变量赋值时,所有大写字符都会转换为小写。 foo=巴 echo$foo 酒吧
S='\“ófoo bar\”' N=0 直到[[${S:$N:1}=~[[:alpha:]]]; do N=$[$N+1]; 完成 #F=`echo${S:$N:1}|tr[:lower:][:upper:]` #F=`echo${S:$N:1}|sed-E-E'S// \u&&'`#其他选项 F=`echo${S:$N:1} F=`echo${F}#将纯Bash解决方案转换为“上层” echo“$F”${S:(($N+1))}#没有垃圾 echo'='${S:0:($N))}“$F”${S:(($N+1))}'='#垃圾被保存 Foo酒吧 =\“Foo酒吧=
-
6 请编写更干净的代码! 你缺少引号 到处都是。 你使用的是过时的语法(反勾号); 你使用的是过时的语法( $[...] ). 你用了很多无用的括号。 您假设字符串由拉丁字母表中的字符组成(重音字母或其他字母表中字母如何?)。 要使这个代码片段可用,您需要做大量工作! (既然您使用的是regex,那么您还不如使用regex来查找第一个字母,而不是循环)。 – 格尼欧尔夫 评论 2017年3月8日18:05 -
6 我认为你错了。 这是伴随着否决票的强制性评论,解释了所有错误的模式和对答案的误解。 请从你的错误中吸取教训(在此之前,试着理解它们),而不是固执。 做一个好人也与传播不良行为不相容。 评论 2017年3月9日9:44 -
1 或者,如果使用Bash≥4,则不需要 信托收据 : 如果[[$S=~^([^[:alpha:]]*)([[:alfa:].*)]]; 然后输出=${BASH_REMATCH[1]}${BASH_REMATCH[2]^}; else out=$S; fi; 打印“%s\n”“$out” 评论 2017年3月9日9:51 -
5 这个代码仍然被严重破坏。 它仍然使用反勾号代替现代替换语法; 它仍然有无与伦比的引用; 它仍然缺少引号 在他们真正重要的地方 ; 等。如果您不相信那些缺少的引号会产生影响,请尝试在测试数据中添加一些空格环绕的glob字符,并解决问题 shellcheck.net 找到,直到此代码清除为止。 – 查尔斯·达菲 评论 2017年3月10日3:40 -
2 至于你引用的语言 unix.stackexchange.com/questions/68694/… ,你想念的是 回声$foo 是一个情况的例子 解析器需要一个单词列表 ; 所以在你的 echo${F} ,的内容 F类 是字符串拆分和全局扩展。 对于 回显${S:$N:1} 示例和所有其他内容。请参见 BashPitfills#14 . – 查尔斯·达菲 评论 2017年3月10日3:45