是否可以在 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