我正在写我的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)
从字符串后面一次一个地获取这些元素的正确方法是什么,或者保证三部分字符串分配这些变量?
我想分成一个数组可能会更好?
#!/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)