string - 如何在 bash 中将字符串与可选字符匹配?

标签 string bash shell jenkins

我有一个小脚本,用于处理 Jenkins 上的管道。它需要能够从以管道名称命名的文件夹中获取文件。

大多数管道名称都遵循以下模式:{Name}Pipeline/{Name}Pipeline.properties

但是,一些管道附加了三位数版本号,如下所示:{Name}Pipeline122/{Name}Pipeline122.properties

在我的脚本中,我有一行将此属性文件的路径存储在变量中:APP_PROPERTY_FILE=/path/to/file/${NAME}Pipeline/${NAME}Pipeline.properties

问题就出在这里!如何允许 bash 匹配不带版本号的管道名称和带版本号的管道名称?

谢谢!

最佳答案

我相信用户想要选择一个具有可选元素(3位数字)的文件,并将文件名存储到shell变量中。

两个挑战:(1) 常规赋值 var=/path/to/something* 不执行路径名扩展;(2) 常规模式匹配不支持可选元素。

可能的解决方案是“if-then-else”或使用扩展的 glob。两种解决方案都假设其中一个文件存在。

APP_PROPERTY_FILE=/path/to/file/${NAME}Pipeline/${NAME}Pipeline.properties
if [ ! -f "$APP_PROPERY_FILE" ] ; then
APP_PROPERTY_FILE=$(echo /path/to/file/${NAME}Pipeline/${NAME}Pipeline[0-9][-0-9][0-9].properties)

使用 extglob 也可以。

APP_PROPERTY_FILE=$(shopt -s extglob ; echo /path/to/file/${NAME}Pipeline/${NAME}Pipeline?([0-9][-0-9][0-9]).properties ; echo $1)

关于string - 如何在 bash 中将字符串与可选字符匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58827475/

相关文章:

java - 周期字符串

java - 错误 : No resource found that matches the given name (at 'title' with value '@string/menu_settings' )

linux - Unoconv 作为 apache 用户无法创建文件

node.js - 从 bash 脚本运行 Node

bash - 让 head 显示文件的最后一行以外的所有内容 : command substitution and standard I/O redirection

bash - 如何将变量从 shell 脚本传递到 expect 脚本?

C - 用空格分隔成整数数组的数字字符串

python如何计算一个单词连续重复的次数

linux - 重定向包含的输出字符串

linux - 如何将查找输出重定向到文件中?