假设我们声明
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//\//:}