是否可以在ruby中创建一个字符串来保持转义字符?

时间:2016-11-16 15:27:09

标签: ruby string escaping user-data

我需要从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标记中的\。如果我把两个\,它保持两个。有关如何保持字符串与我编写它的方式相同的任何建议吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用%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

答案 1 :(得分:0)

我使用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