1

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

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

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

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

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

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

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

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

4

2 回答 2

2

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

因此:

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

任何用单引号引用的字符串'eg.'都不会经过任何扩展而被使用as is

更多细节可以在 的Quoting部分中找到man bash

来自man bash

将字符括在单引号中会保留引号内每个字符的字面值。单引号之间不能出现单引号,即使前面有反斜杠。

于 2013-08-09T14:57:57.033 回答
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
于 2013-08-09T14:54:22.110 回答