用字符串替换模式

用字符串替换模式

假设我们声明

test="/this/isjust/atestvariable/for/stringoperation"

我们想用冒号“:”替换每个“/”实例。

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

echo ${test//\/:}

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

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

/this/isjust/atestvariable/for/stringoperation

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

答案1

这:

${test//\/:}

//会将所有实例(从开头的双斜杠开始)替换为/:任何内容(没有第二个未转义的斜杠)。

这:

${test/\//:}

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

和这个:

${test//\//:}

应将 的所有匹配项替换/:.

例子:

$ 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

答案2

用反斜杠转义斜杠

echo ${test//\//:}

相关内容