是否可以在 ruby 中创建一个保持转义字符的字符串?
Is is possible to create a string in ruby that keeps escaping characters?
我需要从 Ruby 形成一个用户数据脚本,所以我需要保留所有转义字符。当我这样做时:
def user_data
"#!/bin/bash
sed -i -e '/<Name>loadbalanceServerIP<\/Name>/,/<Value>/s/<Value>[^<]*/<Value>1.1.1.1/' /home/wowza/conf/Server.xml"
end
字符串去掉了Name标签中的\。如果我放两个 \,它会同时保留它们。关于如何保持字符串与我编写的方式相同的任何建议?
谢谢!
您可以使用 %q
delimiter 而不是 "
:
def user_data
%q[#!/bin/bash
sed -i -e '/<Name>loadbalanceServerIP<\/Name>/,/<Value>/s/<Value>[^<]*/<Value>1.1.1.1/' /home/wowza/conf/Server.xml]
end
我会使用 heredoc:
def user_data
<<~'SH'
#!/bin/bash
sed -i -e '/<Name>loadbalanceServerIP<\/Name>/,/<Value>/s/<Value>[^<]*/<Value>1.1.1.1/' /home/wowza/conf/Server.xml
SH
end
puts user_data
~
删除缩进,SH
周围的单引号禁用插值和转义。
输出:
#!/bin/bash
sed -i -e '/<Name>loadbalanceServerIP<\/Name>/,/<Value>/s/<Value>[^<]*/<Value>1.1.1.1/' /home/wowza/conf/Server.xml
我需要从 Ruby 形成一个用户数据脚本,所以我需要保留所有转义字符。当我这样做时:
def user_data
"#!/bin/bash
sed -i -e '/<Name>loadbalanceServerIP<\/Name>/,/<Value>/s/<Value>[^<]*/<Value>1.1.1.1/' /home/wowza/conf/Server.xml"
end
字符串去掉了Name标签中的\。如果我放两个 \,它会同时保留它们。关于如何保持字符串与我编写的方式相同的任何建议?
谢谢!
您可以使用 %q
delimiter 而不是 "
:
def user_data
%q[#!/bin/bash
sed -i -e '/<Name>loadbalanceServerIP<\/Name>/,/<Value>/s/<Value>[^<]*/<Value>1.1.1.1/' /home/wowza/conf/Server.xml]
end
我会使用 heredoc:
def user_data
<<~'SH'
#!/bin/bash
sed -i -e '/<Name>loadbalanceServerIP<\/Name>/,/<Value>/s/<Value>[^<]*/<Value>1.1.1.1/' /home/wowza/conf/Server.xml
SH
end
puts user_data
~
删除缩进,SH
周围的单引号禁用插值和转义。
输出:
#!/bin/bash
sed -i -e '/<Name>loadbalanceServerIP<\/Name>/,/<Value>/s/<Value>[^<]*/<Value>1.1.1.1/' /home/wowza/conf/Server.xml