在 bash 中用字符串中的一个模式替换另一个模式时,使用 2 个斜杠和使用 1 个斜杠之间有什么区别?

在 bash 中用字符串中的一个模式替换另一个模式时,使用 2 个斜杠和使用 1 个斜杠之间有什么区别?

在 bash 中给出以下字符串

original="a bird flew in my window"

old="a"

new="the"

以下内容,在原文后使用 2 个斜线

result=${original//$old/$new}

将产生结果=“鸟儿飞进我的窗户”

我在至少一本书中看到过这种带有两个斜线的语法,还有

https://stackoverflow.com/questions/9142131/replace-a-word-with-another-in-bash

但是下面带有 1 个斜线的语句也会产生同样的效果

result=${original/$old/$new}

在某些情况下,使用 1 个斜线或 2 个斜线是否有区别?

答案1

${parameter/pattern/string}

图案被扩展以产生一个模式,就像文件名扩展一样。范围被扩展,并且最长的匹配是图案其价值被替换为细绳。 […]如果图案以 开头/,所有匹配图案被替换为字符串。通常只替换第一个匹配项。

来源(强调我的)

尝试使用original="a sparrow flew in my window"。您将得到the sparrow flew in my window或。您的示例没有显示任何差异,因为您的扩展中the sptherrow flew in my window只有一个。a$original

相关内容