Bash更正语法以获取字符串的前两个字母并使其大写

Bash更正语法以获取字符串的前两个字母并使其大写,bash,Bash,我知道我可以做到我在标题中要求的: input=abcd input=${input^^} #makes uppercase echo ${input:0:2} #gets first two letters 我想知道在一行中执行这两个操作的正确语法是什么 回显“${input:0:2}” 请参阅手册中的 这并不完全符合你的要求 获取字符串的前两个字母,并使其大写 相反,它将值设为大写,然后获取前两个字母。declare-u input=abcd 回显“${input:0:2}” 请参阅手

我知道我可以做到我在标题中要求的:

input=abcd
input=${input^^} #makes uppercase
echo ${input:0:2} #gets first two letters
我想知道在一行中执行这两个操作的正确语法是什么 回显“${input:0:2}” 请参阅手册中的

这并不完全符合你的要求

获取字符串的前两个字母,并使其大写

相反,它将值设为大写,然后获取前两个字母。

declare-u input=abcd
回显“${input:0:2}”
请参阅手册中的

这并不完全符合你的要求

获取字符串的前两个字母,并使其大写


相反,它使值大写,然后获取前两个字母。

不声明数组,仅使用参数展开:

echo $( a=abcd; b=${a:0:2} && echo ${b^^} )
其中:

b=${a:0:2}
正在使用子字符串

${b^^}
正在将该子字符串资本化;echo(在命令替换中)返回它


echo(first)在屏幕上打印,不声明数组,仅使用参数展开:

echo $( a=abcd; b=${a:0:2} && echo ${b^^} )
其中:

b=${a:0:2}
正在使用子字符串

${b^^}
正在将该子字符串资本化;echo(在命令替换中)返回它


echo(first)在屏幕上打印

我认为它不存在。在大多数情况下,各种参数展开运算符不堆叠。我同意切普纳的观点。Bash不能紧凑地执行复杂的字符串操作。你写的东西和我写的一样(可能会颠倒,以免浪费时间将要丢弃的字母大写)。你可以在gnu sed或awk中这样做,也就是说,
sed的/^\(…\)./\U\1/“我认为它不存在。”。在大多数情况下,各种参数展开运算符不堆叠。我同意切普纳的观点。Bash不能紧凑地执行复杂的字符串操作。你写的是我会写的(可能会颠倒,以免浪费时间将要丢弃的字母大写)。你可以在gnu sed或awk中这样做,即
sed的/^\(…\)./\U\1/,而这段代码可以回答这个问题,提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值。虽然此代码可能会回答问题,但提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值。