我正在编写一个Ruby命令行应用程序,用户必须在其中输入“格式字符串”(很像Date.strptime / strftime的字符串)。
我尝试将它们作为命令的参数,例如
> torque "%A\n%d\n%i, %u"
但似乎bash实际上会在处理之前从输入中删除所有反斜杠(加上很多空格的麻烦)。我还尝试了highline gem,它有一些更高级的输入选项,但它会自动转义反斜杠“\” - > “\\”并没有提供替代选项。
我目前的解决方案是进行查找和替换:“\\ n” - > “\ n”。这会解决问题,但它看起来也很糟糕和可怕。
我可以让用户在文本文件中写入字符串(对于用户来说很复杂)或者将其他字符(例如“&&”)视为换行符(对于用户来说仍然很复杂)。
用户在命令行上输入转义字符的最佳方式是什么?
(更新:我检查了strptime / strftime的文档,这些函数的格式字符串用“%n”替换换行符,“%t”标签等等。所以现在我这样做,但是欢迎任何其他建议)
答案 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