【发布时间】:2017-02-28 12:57:59
【问题描述】:
我正在使用 cut 函数来获取所有子字符串。例如:我有一个名为“v1.2.3”的字符串。我想将 1 分配给专业。 2 到次要和 3 到错误(删除第一个字符始终是 v)
例如:
major=$(echo $tag | cut -d'.' -f1)
minor=$(echo $tag | cut -d'.' -f2)
bug=$(echo $tag | cut -d'.' -f3)
echo "$major $minor $bug"
此脚本扩展为 3 行。我的问题是:如何在一次调用中返回所有f1 f2 和f3 并同时分配回major minor 和bug。
我也尝试使用正则表达式。例如:v1.2.3 将分别拆分为 1,2 和 3,但似乎不起作用。
re="^v(.*).(.*).(.*)$"
[[ $tag =~ $re ]] && major="${BASH_REMATCH[1]}" && minor="${BASH_REMATCH[2]}" && patch="${BASH_REMATCH[3]}"
echo $major
echo $minor
echo $patch
谢谢。
【问题讨论】:
-
@tripleee 谢谢。我已经更新了使用正则表达式的问题。请看一看。
-
您的正则表达式是不确定的。如果你想在文字点上分割,
IFS='.'如建议的副本中所建议的那样。 (FWIW 匹配文字点的正则表达式是\.或等效的[.]。)要修剪前导前缀,${tag#v}会生成tag的值,并删除任何前导v。 -
@tripleee 谢谢。但使用这种方法。我会丢失一些我在其他地方需要的关于 $2 $3 的信息。我该如何解决这个问题
-
@TrầnKimDự:在下面查看我的答案。
-
如果您想提出的方法尚未在此处记录,请标记为重复并将您的答案发布到指定的重复项。