【问题标题】:Check last character of a string检查字符串的最后一个字符
【发布时间】:2017-10-30 03:08:25
【问题描述】:

这个 bashism 有内置的 POSIX 等价物吗?

my_string="Here is a string"
last_character=${my_string: -1}

我不断看到这样的推荐,但它们看起来像黑客。

last_character=$(echo -n "$my_string" | tail -c 1)
last_character=$(echo -n "$my_string" | grep -o ".$")

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

【问题讨论】:

标签: string bash shell sh


【解决方案1】:
num=`echo $my_string | wc -c `
let num-=1
last=`echo $my_string | cut -c$num`
echo $last

假设:(它的最后一个字符在这里)是你需要最后一个字符的字符串。希望这会有所帮助。

【讨论】:

  • 如果输入字符串包含换行符,则会中断。
【解决方案2】:

如果您真的只需要 POSIX:

my_string="Here is a string"
last_character=${my_string#"${my_string%?}"}

它的作用本质上是从$my_string 的开头删除$my_string 的最后一个字符,只留下最后一个字符。

【讨论】:

  • 谢谢,仍然是一个 hack,但至少它是一个只有参数扩展的 hack!
  • @miken32 - 绝对是骇人听闻,但胜过管道和调用其他命令。但是,它的通用性要差得多,但这就是适合您的 POSIX。
【解决方案3】:

如果您只需要检查最后一个字符是什么,然后对其值进行操作,那么case ... esac 构造是一种表达它的可移植方式。

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 2014-09-19
    • 2023-03-28
    • 1970-01-01
    • 2020-07-15
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    相关资源
    最近更新 更多