ANSI转义序列,如何从键盘输入转义字符?

4

问题:

  • 我最近发现了一篇有关在echo中更改文本颜色的页面,它非常有帮助,因为它解释了如何通过一系列按键输入转义字符作为单个字符。不幸的是,那是一台学校电脑,历史记录没有保存。此后,我就再也找不到那个页面了。

问题:

  • 如果有人知道输入转义字符^[的按键序列,将不胜感激。

7
请按下 Ctrl+v 键,然后再按 ESC 键 - 但这并不是正确的方法。而且,这并不是一个真正的编程问题。 - clt60
我认为这是编程,因为我正在使用它作为在Bash脚本中回显转义序列的方法,而无需调用echo -e。 - Ambiguities
@JamesC:你应该更加以编程为导向地提出问题,比如说“在我的Bash程序中,我该放什么来输出终端的ANSI转义序列?”,而不是你所问的那个听起来像是想知道如何输入十六进制字符1B的问题。我回答了我认为你想问的问题。 - rici
@rici,为什么呢?如果问题是相关的,措辞只是为了取悦---你---批评者。不过,这显然是一个重复的问题。可惜,我找不到它。咕哝。 - sehe
@sehe:我不在关闭投票者名单上,所以这个建议确切地是关于如何避免被那些关闭投票者批评的。尽管如此,我认为措辞可以改进,因为 OP 的意思是“输出”,而不是“输入”。 - rici
1个回答

1

在解释反斜杠序列的命令中,可以使用反斜杠序列\e生成转义键。

例如:

echo -e "Text can be \e[1;41mred\e[m or \e[1;45mmagenta\e[m"
for back in {30..37}; do
  echo -n $back:
  for fore in {40..47}; do
    printf "\e[1;%2d;%2dm%2d\e[m " $back $fore $fore
  done
  printf "\n"
done

以上未涉及的一个可能性是bash转义解释字符串:$'\e[1m'

虽然使用vt转义序列(如上所示)很容易,并且被大多数常用的unix终端模拟器支持,但是死忠粉会坚持让你学习使用tput命令:

 printf "Here is a %sbold red%s word\n" "$(tput bold)""$(tput setf 4)" "$(tput sgr0)"

在我看来,弄清楚tput符号的奥秘(请参见debian / ubuntu系统上的man 5 terminfo)并不像查找xterm控制序列(谷歌最后三个单词)那么容易,但你的情况可能不同。

示例命令中有一个拼写错误:$(tput setf 4) -> $(tput setaf 1) - IppX
@Ippx:除非你的terminfo数据库有问题,否则两者应该具有相同的工作效果,但“setf”比“setaf”更加死板(即更老)。所以这不是一个打字错误;而是一个故意选择。 - rici
谢谢,我不知道那个。我一定是第一种情况,因为 setf 没有效果。 - IppX
@ippx:你使用什么操作系统/发行版/终端模拟器? - rici
Mint 19.2(基于Ubuntu 18.04)带有Mate 1.22.0终端。 - IppX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接