【问题标题】:what does "// /_" mean in bash scripting [duplicate]“// /_”在bash脚本中是什么意思[重复]
【发布时间】:2022-01-06 14:22:58
【问题描述】:

我目前正在将我们的 shell/bash 脚本从 jenkinsfile 移动到存储在方法中但仍作为 sh 脚本执行的 groovy 脚本。

我遇到的问题是包含 // /_ 的变量

示例:

${VARIABLE_NAME// /_}

当像这样在变量中提供时,我找不到 // /_ 究竟做了什么。 我需要找到另一种方法来做到这一点,因为当转移到 Groovy 方法时,它会导致转义无法正常工作的格式问题。

【问题讨论】:

  • 它将用下划线替换所有空格。

标签: bash shell groovy jenkins-groovy


【解决方案1】:

它将用下划线替换所有空格。

考虑以下示例:

$ var='hello world john doe'
$ echo "${var// /_}"
hello_world_john_doe
$ 

${parameter/pattern/string}
该模式被扩展以产生一个模式,就像在文件名扩展中一样。参数被扩展,模式与其值的最长匹配被替换为字符串。根据下面描述的规则执行匹配(请参阅模式匹配)。 如果pattern以'/'开头,所有匹配的pattern都被替换为字符串。通常只替换第一个匹配项。 如果模式以“#”开头,则必须匹配参数扩展值的开头。如果模式以“%”开头,则必须匹配参数扩展值的末尾。如果 string 为 null,则删除 pattern 的匹配项,并且可以省略 / 后面的 pattern。如果启用了 nocasematch shell 选项(参见 Shopt Builtin 中 shopt 的描述),则执行匹配时不考虑字母字符的大小写。如果参数是‘@’或‘’,则对每个位置参数依次进行替换操作,展开就是结果列表。如果 parameter 是下标为“@”或“”的数组变量,则依次对数组的每个成员进行替换操作,展开结果为列表。

复制自:https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html,我强调/// 的区别。

【讨论】:

  • 是的,很好的解释,谢谢!但是有没有其他方法可以达到同样的效果?当存储在 groovy 脚本中时, // 部分将导致该行的其余部分由于某种原因被识别为注释,从而在脚本的其余部分中产生问题。
  • 您可以通过管道传递给tr(翻译)以将空格转换为下划线。 echo "hello world john doe" | tr ' ' '_' 将输出 hello_world_john_doe ,在您的情况下为:echo "$VARIABLE_NAME" | tr ' ' '_'
猜你喜欢
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多