You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中如何转义反斜杠以生成正确的bash命令?

问题描述

我在Ruby中有如下哈希:

{"metric"=>"Mean F-Score",
 "columns"=>
  [{"name"=>"Id",
    "type"=>"String"},
   {"name"=>"Expected",
    "type"=>"String"}],
 "files"=>
  {"expected"=>"actual_output.csv"},
 "submission_filename"=>"/a/aa/submission.csv"}

通过JSON.generate生成对应的JSON字符串:

irb(main):101:0> json_string = JSON.generate(a)
=> "{\"metric\":\"Mean F-Score\",\"columns\":[{\"name\":\"Id\",\"type\":\"String\"},{\"name\":\"Expected\",\"type\":\"String\"}],\"files\":{\"expected\":\"actual_output.csv\"},\"submission_filename\":\"/a/aa/submission.csv\"}"

我想要生成一条bash命令,将该JSON字符串写入data.json文件,尝试了如下代码:

irb(main):104:0> "echo \"#{json_string}\" > data.json"
=> "echo \"{\"metric\":\"Mean F-Score\",\"columns\":[{\"name\":\"Id\",\"type\":\"String\"},{\"name\":\"Expected\",\"type\":\"String\"}],\"files\":{\"expected\":\"actual_output.csv\"},\"submission_filename\":\"/a/aa/submission.csv\"}\" > data.json"

但执行该bash命令后生成了错误的JSON文件。需要生成可在不同服务器运行的正确命令,期望得到的命令格式如下:

echo "{\"metric\":\"Mean F-Score\",\"columns\":[{\"name\":\"Id\",\"type\":\"String\"},{\"name\":\"Expected\",\"type\":\"String\"}],\"files\":{\"expected\":\"actual_output.csv\"},\"submission_filename\":\"/a/aa/submission.csv\"}" > data.json

请问如何在Ruby中转义反斜杠以实现这一需求?


解决方法

要生成符合要求的bash命令,核心是让Ruby输出的字符串中,JSON里的双引号能被bash正确识别,需要对特殊字符做二次转义,这里有两种可靠的实现方式:

方式一:手动替换转义字符

直接对生成的json_string做字符串替换,把原有的双引号转义为\",同时把原有的反斜杠转义为\\,插入到bash命令模板后就能得到正确格式:

# 对JSON字符串中的双引号和反斜杠做二次转义
escaped_json = json_string.gsub('"', '\\"').gsub('\\', '\\\\')
# 拼接bash命令
bash_command = "echo \"#{escaped_json}\" > data.json"

执行这段代码后,bash_command的值就是你期望的正确bash命令。

方式二:使用Shellwords库自动转义(推荐)

Ruby标准库中的Shellwords提供了专门的shell转义方法,能自动处理所有shell特殊字符,比手动替换更可靠,兼容性也更强:

# 先引入Shellwords库
require 'shellwords'
# 直接用shellescape方法处理JSON字符串,再拼接命令
bash_command = "echo #{json_string.shellescape} > data.json"

这种方法不仅能处理双引号和反斜杠,还能应对JSON中可能出现的空格、特殊符号等,生成的命令可以在不同服务器环境稳定运行。


内容的提问来源于stack exchange,提问作者sankalp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:25:32