作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
假设我在一个变量 some_var
中有一堆文本,它几乎可以是任何东西。
some_var = "Hello, I'm a \"fancy\" variable | with a pipe, double- and single-quotes (terminated and unterminated), and more."
我们还假设,在 CLI Ruby 应用程序中,我希望允许用户将该文本通过管道传输到任何 Unix 命令中。我允许他们输入类似 some_var | 的内容espeak -a 200 -v en-us
,其中管道右侧的命令是安装在其系统上的任何 unix CLI 工具。
还要说的是,我已经注意将变量选择和管道从输入中分离出来,所以我 100% 确定管道后面的命令是什么。 (在这种情况下,我想将变量的内容通过管道传输到 espeak -a 200 -v en-us
。)
我该怎么做?我认为我不能使用反引号方法或 %x[]
文字。我试过执行以下操作......
system("echo '#{some_var}' | espeak -a 200 -v en-us")
...但是任何特殊字符都会搞砸,我无法删除特殊字符。我该怎么办?
最佳答案
除了popen
你还可以看看Shellwords.escape
:
puts Shellwords.escape("I'm quoting many different \"''' quotes")
=> I\'m\ quoting\ many\ different\ \"\'\'\'\ quotes
这将为您处理引用特殊字符(bash 兼容):
system("echo '#{Shellwords.escape(some_var)}' | ....")
http://www.ruby-doc.org/stdlib-1.9.3/libdoc/shellwords/rdoc/Shellwords.html
关于ruby - 如何将变量传递给 ruby 中的 system() 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10732626/
我是一名优秀的程序员,十分优秀!