从这个bash字符串/数组获取令牌...不确定它是什么

时间:2011-07-19 17:17:31

标签: bash

您好我正在写一个bash脚本,我有一个字符串

foo=1.0.3

我想要做的是检查'3'。我做的第一件事是通过这样做摆脱时期。 bar=echo $foo|tr '.' ' '带有反引号,直到最后一个单引号(不知道如何完成写作。

当我执行echo $bar时,它打印1 0 3.现在如何创建仅包含3的变量?非常感谢你

4 个答案:

答案 0 :(得分:2)

当你毫无疑问地学习bash时,有很多方法可以实现你的目标。我认为@ Mat使用bar=${foo##*.}的答案是迄今为止最好的,尽管他没有解释它是如何或为何起作用的。我强烈建议您查看bash tutorial on tldp,当我遇到这样的问题时,这是我的转到源码。对于字符串操作,有一个部分discusses many of the different ways to go about this sort of thing

例如,如果你知道foo总是长5个字符,你可以简单地从它获取第五个字符:

bar=${foo:4}

也就是说,make bar是foo的第五个位置(记住,我们从零开始计数,而不是从一个开始计算)。

如果你知道它永远是foo的最后一个位置,那么你可以倒数:

bar=${foo: -1}

注意-1和冒号之间有一个空格,你需要那个(或括号)来逃避负号。

为了解释@Mat的答案,我不得不查看上面提供的链接。在表达式中显然是双磅符号(哈希标记,octothorpe,无论你想要什么):

${string##substring}

表示从$substring前面删除$string的最长匹配。因此,您正在寻找*.的最长匹配,相当于点之前的一切。很酷,嗯?

答案 1 :(得分:1)

这应该有效:

bar=$(echo $foo|cut -d. -f3)

如果您知道您只想要最后一个点之后的部分(不是. - 分隔列表中的第三个项目),您也可以这样做:

bar=${foo##*.}

优点:没有额外的流程或子shell开始。

答案 2 :(得分:0)

一种方法:构建数组并采取位置2:

array=(`echo $foo | tr . ' '`)
echo ${array[2]}

答案 3 :(得分:0)

这也应该有效:

echo $foo | awk -F. '{print $3}'