我对这个声明(构造?)有点困惑。我找不到任何足够的来源(我什至不知道如何称呼它)。这里发生了什么?
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)
谢谢
阅读有关 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”没有区别)。