假设我们有一个名为“Hello World:最简单的程序”的文件,它的名称保存在一个名为“title”的变量中。
我想将其与 glob 模式匹配相匹配,但删除冒号。换句话说,我希望它匹配“Hello World 最简单的程序”
我发现您可以使用以下方法做到这一点:
${/:/|${title}|}
它有效,但我不明白为什么。
我知道“|” 是 OR,所以对我来说它看起来像匹配“${/:/}”或“${${title}}”或“${}”,它们看起来都不像是在删除冒号。
所以我的问题是:上面的 glob 模式匹配表达式如何/为什么从标题中删除冒号?
编辑:我应该提到我使用的外壳是 Steam ROM 管理器。看来我错了,它不是一个 glob 表达式,而是一个 Steam ROM Parser 函数变量,它可以选择使用 glob 语法(代替默认的 regex 语法)。谢谢 Steeldiver 和 ilkkachu!
您问题中的表达式不是glob expression,它显然是一个Steam ROM Parser 函数变量,可以选择使用 glob 语法(代替默认的 regex 语法)作为其模式匹配序列。
表达式的形式
用
pattern
等于:
和input
等于变量展开${title}
。在这种情况下|
被理解为一种三元条件So
${/:/|${title}|}
意味着匹配 in 的:
出现${title}
并将它们替换为空。请注意,由于
:
在 shell glob 或正则表达式语法中都不是特殊的,因此是否设置为实际上并不Parser Type
重要glob
。在 bash 中,假设您有
title="Hello World: The easiest program"
,如果您使用这样的参数扩展:它会打印出来
${title/:/}
说“取参数标题,但第一次有一个':',sub in a ''。” (也就是什么都没有)如果你使用额外的 /,像这样:
${title//:/}
它将替换所有的。有一个明显的替代: