【发布时间】:2015-02-07 08:42:12
【问题描述】:
我正在使用 "sed" 命令替换 linux shell 脚本中“.properties”文件中的字符串。问题是它没有显示双引号。
注意:我认为 sed 命令会忽略双引号,所以无论如何要明确强制它不忽略它。
“Shell 脚本文件”
#!/bin/bash
# First Script
#Include Properties File
. directoryPaths.properties
sed -i "s#EPOLD#$EPNEW#" *Test*
属性文件:
EPNEW="jms:/Queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue format="pox" "
文件:
<?xml version="1.0" encoding="UTF-8"?>
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="Component">
<address uri=EPOLD/>
</endpoint>
当前结果:
<?xml version="1.0" encoding="UTF-8"?>
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="Component">
<address uri=jms:/Queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactoryGLBookingService_EPLOCALamp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactoryGLBookingService_EPLOCALamp;java.naming.provider.url=tcp://localhost:61616GLBookingService_EPLOCALamp;transport.jms.DestinationType=queue format=pox />
</endpoint>
预期结果:
<?xml version="1.0" encoding="UTF-8"?>
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="Component">
<address uri="jms:/Queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactoryGLBookingService_EPLOCALamp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactoryGLBookingService_EPLOCALamp;java.naming.provider.url=tcp://localhost:61616GLBookingService_EPLOCALamp;transport.jms.DestinationType=queue format="pox" " />
</endpoint>
【问题讨论】:
-
这就是 Bash 中引号的工作方式。
foo="bar"将$foo的值设置为bar。如果您希望它是"bar",请使用foo="\"bar\""或foo='"bar"'。