Shellscript:返回cut函数的多个值

时间:2016-10-19 04:15:27

标签: shell sh

我使用剪切功能获取所有子字符串。例如:我有一个名为" 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 f2f3,并同时转回major minorbug时间。

我也尝试使用正则表达式。例如: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

感谢。

2 个答案:

答案 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
$