String 在bash中获取小写子字符串

String 在bash中获取小写子字符串,string,bash,String,Bash,我发现了如何将bash中的字符串作为小写: > multi_case='MULTIcaseSTRING' > echo ${multi_case,,} multicasestring …以及如何获取字符串的最后两个字母: > echo ${multi_case:(-2)} NG 。。。但我不知道如何把它们结合起来 如何获得小写的最后两个字母?如果有帮助的话,我知道字符串的长度总是2到5个字符 理想情况下,我正在寻找一个相当短的单行程序。不是纯bash,但您可以使用tr在一行

我发现了如何将bash中的字符串作为小写:

> multi_case='MULTIcaseSTRING'
> echo ${multi_case,,}
multicasestring
…以及如何获取字符串的最后两个字母:

> echo ${multi_case:(-2)}
NG
。。。但我不知道如何把它们结合起来

如何获得小写的最后两个字母?如果有帮助的话,我知道字符串的长度总是2到5个字符


理想情况下,我正在寻找一个相当短的单行程序。

不是纯bash,但您可以使用
tr
在一行中完成此操作:

multi_case='MULTIcaseSTRING'
tr '[[:upper:]]' '[[:lower:]]' <<< "${multi_case:(-2)}"
ng
multi_case='MULTIcaseSTRING'
tr'[:upper:][]'[:lower:][]'您可以“滥用”for循环(如果您确定变量不包含任何通配符或空格):

但实际上,我会选择一个临时变量:

TMP=${multi_case,,}; echo ${TMP:(-2)}

不幸的是,我不认为您可以嵌套这些扩展,因此如果您发现自己经常同时做这两件事,那么您最好定义一个函数。我有bash 3.2.25和
echo${multi_case,,}
抛出了“坏替换”这个问题已经有了答案[here][1],您可能会找到其他信息[here][2][1]:[2] :@AlvaroFlañoLarrondo在
bash
4中添加了
^^
(大写)运算符。
TMP=${multi_case,,}; echo ${TMP:(-2)}