String 结合变格和子串变量展开

String 结合变格和子串变量展开,string,bash,substr,String,Bash,Substr,如果将^附加到变量,Bash会将其内容的第一个字母大写。(类似地,,将其发送为小写,并将其中任何一个字符加倍,将转换应用于整个字符串,而不仅仅是第一个字母。) 您还可以执行${variable:position:length}来提取子字符串: echo ${foo:0:1} # h tr [[:lower:]] [[:upper:]] <<< "${foo:0:1}" H 到目前为止,我还没有找到一种方法,可以在不创建临时变量的情况下组合这些变量。是否有一种形式可以从任意

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

您还可以执行
${variable:position:length}
来提取子字符串:

echo ${foo:0:1}  # h
tr [[:lower:]] [[:upper:]] <<< "${foo:0:1}"
H

到目前为止,我还没有找到一种方法,可以在不创建临时变量的情况下组合这些变量。是否有一种形式可以从任意字符串中仅获取大写的第一个字母?

您可以将
tr
与子字符串一起使用:

echo ${foo:0:1}  # h
tr [[:lower:]] [[:upper:]] <<< "${foo:0:1}"
H

tr[[:lower:][[:upper:][]您可以将
tr
与子字符串一起使用:

echo ${foo:0:1}  # h
tr [[:lower:]] [[:upper:]] <<< "${foo:0:1}"
H

tr[[:lower:][[:upper:][]它不会改变您看到的无法“链接”展开的基本限制,但您可以将展开的结果分配给同一个变量,并删除临时变量

例如:

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

回显“Test”。

它不会改变您看到的无法“链接”展开的基本限制,但您可以将展开的结果分配给同一个变量,并删除临时变量

例如:

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

回显“Test”。

否。参数扩展运算符不组合,因此如果您想要多个副作用,则需要一个临时变量(可以包括覆盖原始值,如@fred所示)或一个外部工具来处理扩展结果(如@anubhava所示)

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

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

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

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

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