用字符串替换模式

Mat*_*Man 4 bash string

假设我们声明

test="/this/isjust/atestvariable/for/stringoperation"
Run Code Online (Sandbox Code Playgroud)

我们想用冒号 ':' 替换 '/' 的每个实例。

然后,我认为这个命令应该有效:

echo ${test//\/:}
Run Code Online (Sandbox Code Playgroud)

(as${variable//pattern/string}用指定的字符串替换模式的所有匹配项)

但是,在运行 echo 时${test//\/:},我得到的输出为

/this/isjust/atestvariable/for/stringoperation
Run Code Online (Sandbox Code Playgroud)

我可能哪里出错了?感谢您的帮助。

ilk*_*chu 8

这个:

${test//\/:}
Run Code Online (Sandbox Code Playgroud)

将用空(没有第二个未转义的斜线)替换所有实例(因为//在开始时/:使用双斜线)。

这个:

${test/\//:}
Run Code Online (Sandbox Code Playgroud)

将(已转义)的第一个实例(因为单个斜杠作为分隔符)替换为./:

和这个:

${test//\//:}
Run Code Online (Sandbox Code Playgroud)

应该/用 a替换所有匹配项:

例子:

$ test="/this/isjust/atestvariable/:for/:stringoperation"
$ echo ${test//\/:}
/this/isjust/atestvariableforstringoperation
$ echo ${test/\//:}
:this/isjust/atestvariable/:for/:stringoperation
$ echo ${test//\//:}
:this:isjust:atestvariable::for::stringoperation
Run Code Online (Sandbox Code Playgroud)


Ipo*_*cer 5

用反斜杠转义斜杠

echo ${test//\//:}
Run Code Online (Sandbox Code Playgroud)