结合大小写更改和子字符串变量扩展

时间:2017-01-19 17:36:13

标签: string bash substr

如果将^附加到变量,则Bash将其内容的第一个字母大写。 (类似地,,将它发送到小写并且加倍,其中任何一个都将转换应用于整个字符串,而不仅仅是第一个字母。)

foo="hello world"
echo ${foo^}  # Hello world

您也可以${variable:position:length}提取子字符串:

echo ${foo:0:1}  # h

到目前为止,我还没有找到一种方法来组合这些,显然,创建一个临时变量。是否有一个表单,我可以从任意字符串中获得大写的第一个字母?

3 个答案:

答案 0 :(得分:2)

它不会改变您在无法“链接”扩展方面所看到的基本限制,但您可以将扩展的结果分配给同一个变量并取消临时变量。

例如:

A=text
A="${A^}"
A="${A//x/s}"
echo "$A"

回应“测试”。

答案 1 :(得分:1)

您可以将tr与substring:

一起使用
tr [[:lower:]] [[:upper:]] <<< "${foo:0:1}"
H

答案 2 :(得分:1)

没有。参数扩展操作符不构成,因此如果您需要多个副作用,则需要一个临时变量(可以包括覆盖原始值,如@fred所示)或外部工具来处理扩展的结果(如图所示) @anubhava)。

您的另一种选择是使用支持支持更复杂操作的其他shell,例如zsh

% foo="hello world"
% % print ${(U)${foo:0:1}}
H