我正在使用数组变量中的值替换文本SUBJECT
,如下所示:
#!/bin/bash
# array of subjects, the ampersand causes a problem.
subjects=("Digital Art" "Digital Photography" "3D Modelling & Animation")
echo $subjects[2] # Subject: 3D Modelling & Animation
sed -i -e "s/SUBJECT/${subjects[2]}/g" test.svg
而不是替换文本SUBJECT
,结果文本如下所示:
3D Modelling SUBJECT Animation
如何将&符号作为文字&
包含在sed中并使其正确回显?
答案 0 :(得分:2)
问题是替换文字中是否存在&
。 &
sed
将完全匹配的文字置于替换状态,因此输出中会显示SUBJECT
。
你可以使用这个技巧:
sed -i "s/SUBJECT/${subjects[2]//&/\\&}/g" test.svg
在调用${subjects[2]//&/\\&}
替换之前, &
将\&
替换为subjects
数组的第二个元素中的sed
。
答案 1 :(得分:1)
您可以在参数扩展中转义&
:
sed -i -e "s/SUBJECT/${subjects[2]//&/\\&}/g" test.svg
这将扩展如下:
$ echo "${subjects[2]//&/\\&}"
3D Modelling \& Animation
如果没有&
,则没有任何反应。
答案 2 :(得分:0)
sed -i -e "s/SUBJECT/${subjects[2]//&/\\&}/g" test.svg