Bash 如何获取字符串的倒数第二个字符?

bak*_*olo 3 bash

有一个很好的答案来获取字符串的最后一个字符

str='abcd/'
echo "${str: -1}"
Run Code Online (Sandbox Code Playgroud)

如何获取倒数第二个即返回“d”而不是“/”

pax*_*blo 5

正如您似乎已经知道的那样,负位置是相对于字符串末尾的-1,因此从最后一个字符开始,-2从倒数第二个字符开始,依此类推。

但是,您使用的形式是获取子字符串的简化形式,它获取从指定位置到字符串末尾的所有字符。

您还可以提供显式长度来获取从该位置开始的有限数量的字符,因此,要获取倒数第二个字符,您需要的是:

${str: -2:1}
Run Code Online (Sandbox Code Playgroud)

文档的相关部分bash是:

${parameter:offset}
${parameter:offset:length}

子串扩展。length从 指定的字符开始扩展到参数值的最多字符offset

如果length省略,则扩展为参数值的子字符串,从指定的字符开始,offset一直延伸到值的末尾。