我使用剪切功能获取所有子字符串。例如:我有一个名为" v1.2.3"的字符串。我想为主要人员分配1。 2到次要和3到bug(删除第一个字符总是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
感谢。
答案 0 :(得分:3)
这可以在纯bash
字符串操作中完成。有关各种技术,请参阅shell-parameter-expansion。
$ IFS="." read -r major minor bug <<< "v1.2.3" # read the strings to variables
$ major="${major/v/}" # removing the character 'v' from major
$ printf "%s %s %s\n" "$major" "$minor" "$bug" # printing the individual variables
1 2 3
答案 1 :(得分:2)
我最近了解到&#34;阅读&#34;。有点像这样:
#set field separator to match your delimiter
ifsOld=$IFS
IFS='.'
read major minor bug <<<$(echo $tag | cut -d'.' -f 1,2,3)
IFS=$ifsOld
例如:
$ IFS='.'
$ read major minor bug <<<$(echo 127.1.2.123 | cut -d'.' -f 1,2,3)
$ echo $major $minor $bug
127 1 2
$