在bash

时间:2016-08-02 19:21:07

标签: string bash

我有一个字符串,例如time=1234,我想在=符号后面只提取数字。但是,此数字可以在0到100000之间(例如 - time=1time=23time=99999等。)

我已尝试$(string:5:8}之类的内容,但这仅适用于某个长度的示例。

如何在=符号后获取所有内容的子字符串?我更愿意在没有cutawk等外部命令的情况下执行此操作,因为我将在可能具有或不具有该功能的设备上运行此脚本。我知道有些例子使用外部函数,但我试图找到一个没有使用它的解决方案。

2 个答案:

答案 0 :(得分:6)

s=time=1234
time_int=${s##*=}
echo "The content after the = in $s is $time_int"

这是一个参数扩展,匹配来自变量前面的*=的所有内容 - 因此,所有内容都包括最后一个=

如果打算将其视为非贪婪(也就是说,只删除第一个 =而不是 last {{1}的内容}),使用= - 一个${s#*=}而不是两个。

参考文献:

答案 1 :(得分:2)

如果time=部分不变,您可以使用${str#time=}

删除前缀

如果你执行str='time=123123',我会说你echo ${str#time=} 123123