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

标签 bash shell

我正在编写接收后 git 钩子(Hook)的第二个版本。

我有一个 GL_REPO 变量符合:

/project.name/vhost-type/versioncodename

它可能有也可能没有尾部和/或前面的斜线。

我当前的代码误解了以下代码的功能,因此它清楚地将 $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"

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

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

最佳答案

#!/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]}"

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

IFS=/ read PROJECT_NAME VHOST_TYPE PROJECT_CODENAME <<< "$GL_REPO"

关于bash - 如何在 Linux Bash/Shell 中将字符串拆分为组件部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31205026/

相关文章:

linux - 每 10 秒清除我的脚本日志

perl - 有没有像 Perl 的 IPython/IRB 之类的东西?

bash - 如何在 bash 中使用 cut 命令显示除指定列之外的所有列?

linux - Bash 脚本 - if 和 grep 不起作用

linux - 无与伦比的'。设置别名时出错

shell - 如何在 emacs shell 中向后搜索?

windows - 计划在 Windows 中运行 bash shell 脚本

bash - 在 shell 脚本中连接字符串

bash - 如何在 bash 中转义用户输入变量中的正斜杠?

bash - 如何通过管道传输到 awk 脚本中