我有下面的绳子

str="aaa.bbb.1.ccc.[mmm]."

如果我用下面的命令进行替换,那么它可以工作
# echo ${str/ccc.\[mmm\]./}
aaa.bbb.1.

现在我想将模式放入一个变量中,那么substitution命令将不起作用
# var="ccc.\[mmm\]."
# echo ${str/$var/}
aaa.bbb.1.ccc.[mmm].

# var="ccc.[mmm]."
# echo ${str/$var/}
aaa.bbb.1.ccc.[mmm].

如何使用变量中定义的模式进行替换?

最佳答案

将表达式置于双引号中:

echo "${str/$var/}"

在busybox上为我工作:
# str="aaa.bbb.1.ccc.[mmm]."
# echo ${str/ccc.\[mmm\]./}
aaa.bbb.1.
# var="ccc.\[mmm\]."
# echo ${str/$var/}
aaa.bbb.1.ccc.[mmm].
# echo "${str/$var/}"
aaa.bbb.1.
# ls -l /bin/sh
lrwxrwxrwx    1 root     root             7 May  9 05:22 /bin/sh -> busybox
#

关于regex - 模式包含“[”时,字符串替换不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30032931/

10-11 21:55