您好我正在写一个bash脚本,我有一个字符串拿令牌...不知道它是
foo=1.0.3
我想要做的就是检查“3 ”。我做的第一件事就是通过这样做来摆脱这段时间。 bar=echo $foo|tr '.' ' '
反向回响直到最后一个单引号(不知道如何完成写作
当我做一个echo $bar
它打印1 0 3.现在我该如何创建一个只包含3的变量?非常感谢你多
您好我正在写一个bash脚本,我有一个字符串拿令牌...不知道它是
foo=1.0.3
我想要做的就是检查“3 ”。我做的第一件事就是通过这样做来摆脱这段时间。 bar=echo $foo|tr '.' ' '
反向回响直到最后一个单引号(不知道如何完成写作
当我做一个echo $bar
它打印1 0 3.现在我该如何创建一个只包含3的变量?非常感谢你多
正如你无疑是学习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}
也就是说,使巴foo的第五个位置(记住,我们从零开始计数,而不是从一开始)。
如果你知道它总是将是foo的最后一个位置,那么你可以指望倒退:
bar=${foo: -1}
通知存在-1
和冒号之间的空间,你需要一个(或括号)来避开负号。
为了解释@Mat的答案,我必须看看我上面提供的链接。显然,双磅符号(#号,octothorpe,无论你怎么称呼他们)在表达:
${string##substring}
意味着从$string
前删除$substring
最长匹配。所以你正在寻找*.
的最长匹配,相当于所有的东西都在之前。很酷,是吧?
方式一:建立一个数组,并采取位置2:
array=(`echo $foo | tr . ' '`)
echo ${array[2]}
如何在脚本中使用'echo $ {array [2]}'行。我一直试图在脚本中使用它,但它说'“(”意外“)。我需要额外的反引号或引号或双引号或parens(bash正在杀死我)。非常感谢 – Rell3oT
@ Rell3ot:查看http://tldp.org/LDP/abs/html/testconstructs.html以回答有关包件和括号的问题。要回答你的问题,如果你只是分配$ {array [2]},你甚至不需要echo,你可以简单地执行'bar = $ {array [2]}'。但还有其他(或许更好)的方法可以做到,请查看其他答案。 –
这应该工作:
bar=$(echo $foo|cut -d. -f3)
如果你知道你只希望最后的点(未在.
- 分隔列表中的第三项)之后的部分,你也可以这样做:
bar=${foo##*.}
优势:无需额外的过程或子shell启动。
这也应太:
echo $foo | awk -F. '{print $3}'
谢谢杰德。很酷。特别感谢我可以阅读的额外文档。 – Rell3oT