2015-05-04 1 views
1

У меня есть следующая строкаСтрока подстановки не работает, если шаблон содержит «[»

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

Если я замену с помощью следующей команды, то она работает

# echo ${str/ccc.\[mmm\]./} 
aaa.bbb.1. 

Теперь я хочу поставить шаблон в переменную, то команда замещения не будет работать

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

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

Как я могу сделать замену w с шаблоном, определенным в переменной?

+1

Не уверен, следовательно комментарий, но, возможно, вам нужно бежать дважды? – npinti

+3

'var =" ccc. \ [Mmm \]. "' Работает для меня в BASH – anubhava

+0

, если вы имеете в виду 'var =" ccc. \\ [mmm \\]. "', Это также не сработало – MOHAMED

ответ

0

Поместите выражение в двойные кавычки:

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 
#