关于shell:Shellscript:为cut函数返回多个值

Shellscript: return multiple values for cut function

本问题已经有最佳答案,请猛点这里访问。

我正在使用cut函数获取所有子字符串。例如:我有一个名为"v1.2.3"的字符串。我想给少校分配一个。2到次要和3到错误(删除第一个字符始终为V)

例如如下:

1
2
3
4
  major=$(echo $tag | cut -d'.' -f1)
  minor=$(echo $tag | cut -d'.' -f2)
  bug=$(echo $tag | cut -d'.' -f3)
  echo"$major $minor $bug"

此脚本扩展为3行。我的问题是:如何在一次调用中返回所有的f1f2f3,并同时分配回majorminorbug

我还尝试使用正则表达式。例如:v1.2.3将分别拆分为1、2和3,但似乎不起作用。

1
2
3
4
5
  re="^v(.*).(.*).(.*)$"
  [[ $tag =~ $re ]] && major="${BASH_REMATCH[1]}" && minor="${BASH_REMATCH[2]}" && patch="${BASH_REMATCH[3]}"
  echo $major
  echo $minor
  echo $patch

谢谢。


这可以在纯bash字符串操作中完成。有关各种技术,请参阅shell参数扩展。

1
2
3
4
5
$ 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
""$major""$minor""$bug" # printing the individual variables
1 2 3

我最近学会了"阅读"。有点像这样:

1
2
3
4
5
6
7
#set field separator to match your delimiter
ifsOld=$IFS
IFS='.'

read major minor bug <<<$(echo $tag | cut -d'.' -f 1,2,3)

IFS=$ifsOld

如:

1
2
3
4
5
$ IFS='.'
$ read major minor bug <<<$(echo 127.1.2.123 | cut -d'.' -f 1,2,3)
$ echo $major $minor $bug
127 1 2
$