如何在bash的最后一个" - "上拆分字符串?

Dan*_*nor 3 bash split

给定字符串"foo-bar-1.4.5""for-bar-baz-1.8.3"如何将这些字符串分成两部分:第一部分分别是最后一个" - "("foo-bar","foo-bar-baz")和最后一部分("1.4.5""1.8.3")之前的所有部分?

我可以想象一些策略,比如拆分" - "然后添加除最后一部分之外的所有内容.或者也许是替代的正则表达式.尽管如此,Bash是我最重要的事情.我不知道语法是什么样子,我已经尝试了一些事情sedawk,但我缺乏舒适性的bash阵列是挂我.我想你们其中一个bash专家可以在短时间内解决这个问题,并通过一个例子非常快速地教我.

编辑:在命令运行之前我不知道" - "的数量.该方法应处理n >= 1" - ".

Jos*_*lly 6

您可以使用参数扩展:

${var#pattern}从var的开头删除最短的匹配模式.使用##删除最长匹配模式.%和%%的工作方式类似,但从var的末尾删除.

#!/bin/bash
first="foo-bar-1.4.5"
second="foo-bar-baz-1.8.3"

echo ${first%-*}
echo ${first##*-}

echo ${second%-*}
echo ${second##*-}
Run Code Online (Sandbox Code Playgroud)

输出:

foo-bar
1.4.5
foo-bar-baz
1.8.3
Run Code Online (Sandbox Code Playgroud)