gpt4 book ai didi

ruby - 为 TextMate 的 $DIALOG 命令转义 Ruby 字符串

转载 作者:数据小太阳 更新时间:2023-10-29 08:34:54 25 4
gpt4 key购买 nike

呼唤正则表达式大师。我现在在转义 Ruby 中的字符串时遇到了一些麻烦,以便我可以使用 exec%x{} 或类似方法将其传递到命令行实用程序。命令行命令是 TextMate 对话框功能,它基本上是这样工作的(在 TextMate 中将其作为 shell 脚本运行。):

$DIALOG -mp "items=('string1','string2', 'string3');" RequestItem

但它也可以使用您指定的 nib 文件,例如“path/to/my/nib/file.nib” 所以,我需要将整个命令作为字符串传递给 exec/p>

command = <<string
$DIALOG -mp "items=('string1','string2', 'string3');" "path/to/my/nib/file.nib"
string
exec command

这自然很好用。我遇到的问题是 items 数组的组件是通过编程确定的,因此我需要以编程方式转义该字符串,以便将其全部正确传递给 $DIALOG 命令。

到目前为止,我已经确定需要转义单引号、双引号、换行符和制表符。我已经尝试了大量潜在的正则表达式解决方案,但还没有找到可靠的转义机制。基本上,我需要填写

class String
def escape_for_dialog
self
end
end

使用正确的 self.gsub 调用将转义我放入参数中的字符串。所以,假设我的参数在运行时被查找,下面是我认为我需要使用上面的相同示例做的事情:

command = <<string
$DIALOG -mp "items=('#{item1.escape_for_dialog}', '#{item2.escape_for_dialog}', '#{item3.escape_for_dialog}');" "path/to/my/nib/file.nib"
string
exec command

我发现 heredoc 风格有助于不必记住转义所有引号,但参数仍然存在问题,所以我要求有人比我更擅长字符串操作和正则表达式在填写该字符串方法时。我将不胜感激! :)

最佳答案

String.inspect 将以一种让 shell 满意的方式转义分隔符等:

itemlist = "(#{items.join(', ')})"
command = [
$DIALOG,
'-mp',
itemlist.inspect,
'path/to/my/nib/file.nib',
].join(' ')
system(command)

关于ruby - 为 TextMate 的 $DIALOG 命令转义 Ruby 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2072797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com