如何在Linux Bash/Shell中将字符串拆分为组件部分

Mai*_*aat 2 bash shell

我正在写我的post-receive git hook的第二个版本.

我有一个GL_REPO符合的变量:

/project.name/vhost-type/versioncodename
Run Code Online (Sandbox Code Playgroud)

它可能有也可能没有尾随和/或前一个斜杠.

我当前的代码误解了以下代码的功能,因此它清楚地复制$versioncodename到每个变量中:

# regex out project codename
PROJECT_NAME=${GL_REPO##*/}
echo "project codename is: $PROJECT_NAME"

# extract server target vhost-type -fix required
VHOST_TYPE=${GL_REPO##*/}
echo "server target is: $VHOST_TYPE"

# get server project - fix required
PROJECT_CODENAME=${GL_REPO##*/}
echo "server project is: $PROJECT_CODENAME"
Run Code Online (Sandbox Code Playgroud)

从字符串后面一次一个地获取这些元素的正确方法是什么,或者保证三部分字符串分配这些变量?

我想分成一个数组可能会更好?

Eug*_*sca 7

#!/bin/bash

GL_REPO=/project.name/vhost-type/versioncodename
GL_REPO=${GL_REPO#/} # remove preceding slash, if any

IFS=/ read -a arr <<< "$GL_REPO"

PROJECT_NAME="${arr[0]}"
VHOST_TYPE="${arr[1]}"
PROJECT_CODENAME="${arr[2]}"
Run Code Online (Sandbox Code Playgroud)

更新:anishsane的替代解决方案:

IFS=/ read PROJECT_NAME VHOST_TYPE PROJECT_CODENAME <<< "$GL_REPO"
Run Code Online (Sandbox Code Playgroud)