${var/a/b/\c} 是什么意思?

use*_*963 4 bash string

我对这个声明(构造?)有点困惑。我找不到任何足够的来源(我什至不知道如何称呼它)。这里发生了什么?

bash-4.3$ var="a/b"
bash-4.3$ f=${var/b/c/\d}                                                                                                                                                                                                             
bash-4.3$ echo $f                                                                                                                                                                                                                     
a/c/d
Run Code Online (Sandbox Code Playgroud)

或这个:

bash-4.3$ var="b/a"                                                                                                                                                                                                                   
bash-4.3$ f=${var/b/c/\d}                                                                                                                                                                                                             
bash-4.3$ echo $f                                                                                                                                                                                                                     
c/d/a 
Run Code Online (Sandbox Code Playgroud)

谢谢

gol*_*lum 7

阅读有关 bash 的参数扩展的信息。在您的示例中,您使用的搜索和替换语法替换了给定模式的第一次出现。

${parameter/pattern/string}
Run Code Online (Sandbox Code Playgroud)

例子:

> X="aaaa"
> echo ${X/a/b}   # substitute first occurence of a with b
> baaa
Run Code Online (Sandbox Code Playgroud)

替换所有出现的语法是:

${parameter//pattern/string}
Run Code Online (Sandbox Code Playgroud)

例子:

> X="aaaa"
> echo ${X//a/b}   # substitute all occurences of a with b
> bbbb
Run Code Online (Sandbox Code Playgroud)

因此,在您的第一个示例中,您的参数是“a/b”,并且您告诉 bash 将“a/b”(var 的值)中第一次出现的“b”替换为字符串“c/d”(这导致“a/c/d”)。请注意,“\d”被不必要地转义 - 与单独的“d”没有区别)。