检查字符串的最后一个字符

mik*_*n32 5 string bash shell sh

这种 bashism 是否有内置的 POSIX 等价物?

my_string="Here is a string"
last_character=${my_string: -1}
Run Code Online (Sandbox Code Playgroud)

我一直看到推荐这样的东西,但它们看起来像黑客。

last_character=$(echo -n "$my_string" | tail -c 1)
last_character=$(echo -n "$my_string" | grep -o ".$")
Run Code Online (Sandbox Code Playgroud)

但是,也许我们对 POSIX shell 拥有的只是一个 hack ?

zwe*_*wer 6

如果你真的必须这样做 POSIX:

my_string="Here is a string"
last_character=${my_string#"${my_string%?}"}
Run Code Online (Sandbox Code Playgroud)

它所做的基本上是$my_string从 的开头删除它的最后一个字符$my_string,只留下最后一个字符。