我正在使用以下字符串:
\e[48;5;15mText\e[0m
当我使用bash shell打印字符串时,我得到带背景和前景颜色的文本。我想在Ruby中操纵这个字符串(包括转义序列中的单个字符)。当我将这个字符串从命令行传递给Ruby或者直接在我的Ruby脚本中使用它时,转义字符"消失了。"
Ruby脚本
puts("\e[48;5;15mText\e[0m".chars.to_a)
预期输出(点代表空格)
\
e
[
4
8
;
5
;
1
5
m
T
e
x
t
\
e
[
0
m
当前输出(点代表空格)
.
.
.
.
.
.
.
.
.
.
.
T
e
x
t
.
.
.
.
.
因为我在Ruby脚本中使用字符串而我的目标是操纵字符串(包括转义字符),我觉得我应该能够在字符串上运行escaped_string.chars.to_a
并得到输出该字符串中的单个字符。我已经能够在bash和python脚本中执行此操作而没有任何问题。
问题
1.为什么我看不到这些逃脱字符?
2.我需要进行哪些设置才能打开"请参阅"这些转义字符?
答案 0 :(得分:1)
您没有看到转义字符,因为终端仿真器拦截它们以更改颜色和内容而不会打印它们。这是转义字符的重点。几乎总是没有“设置”可以让终端仿真器打印它们,但这显然取决于你正在使用的特定仿真器。
查看角色的一种方法是改为:
"\e[48;5;15mText\e[0m".chars.each {|char| p char }
答案 1 :(得分:0)
它们不仅仅是转义字符,它们是字符序列 试试这个:
puts("\e[48;5;15m")
puts("Text".chars.to_a)
puts("\e[0m")
您现有的代码有效地打印了这个:
puts("\e\n[\n4\n8\n;\n5\n;\n1\n5\nm\nT\ne\nx\nt\n\e\n[\n0\nm")
因此,转义符号序列被破坏。