在Ruby命令行应用程序中获取转义输入

时间:2013-08-09 14:34:33

标签: ruby bash escaping backslash

我正在编写一个Ruby命令行应用程序,用户必须在其中输入“格式字符串”(很像Date.strptime / strftime的字符串)。

我尝试将它们作为命令的参数,例如

> torque "%A\n%d\n%i, %u"

但似乎bash实际上会在处理之前从输入中删除所有反斜杠(加上很多空格的麻烦)。我还尝试了highline gem,它有一些更高级的输入选项,但它会自动转义反斜杠“\” - > “\\”并没有提供替代选项。

我目前的解决方案是进行查找和替换:“\\ n” - > “\ n”。这会解决问题,但它看起来也很糟糕和可怕。

我可以让用户在文本文件中写入字符串(对于用户来说很复杂)或者将其他字符(例如“&&”)视为换行符(对于用户来说仍然很复杂)。

用户在命令行上输入转义字符的最佳方式是什么?

(更新:我检查了strptime / strftime的文档,这些函数的格式字符串用“%n”替换换行符,“%t”标签等等。所以现在我这样做,但是欢迎任何其他建议)

2 个答案:

答案 0 :(得分:2)

您正在寻找的是使用单引号而不是双引号。

因此:

> torque '%A\n%d\n%i, %u'

单引号'eg.'中引用的任何字符串都不会进行任何扩展,而是使用as is

更多详情可在Quoting的{​​{1}}部分找到。

来自man bash

  

用单引号括起字符可保留引号中每个字符的字面值。单引号之间可能不会出现单引号,即使前面有反斜杠也是如此。

答案 1 :(得分:0)

p eval("\"#{gets.chomp}\"")

使用示例:

\n\b    # Input by the user from the keyboard
"\n\b"  # Value from the script

%A\n%d\n%i, %u   # Input by the user from the keyboard
"%A\n%d\n%i, %u" # Value from the script