Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 插入符号和ANSI转义序列之间的差异_Shell_Terminal_Colors - Fatal编程技术网

Shell 插入符号和ANSI转义序列之间的差异

Shell 插入符号和ANSI转义序列之间的差异,shell,terminal,colors,Shell,Terminal,Colors,我的问题是从两个不同的观察中提出的 在cat中,当我按下ESC或其他控制键时,Bash使用插入符号表示它们。图中显示我按下了ESC键,但Bash显示为^[ 然而,如果我想在脚本中编写彩色文本,例如通过echo,我似乎必须使用ANSI转义序列 该图显示插入符号在echo中不起作用,但ANSI转义序列起作用 我可以说我们必须使用ANSI转义序列来输入ESC键,但是Bash将使用插入符号来表示它吗 有没有一种方法可以通过插入符号输入ESC键?Bash可以表示ANSI转义序列中输入的键吗 请注意,我

我的问题是从两个不同的观察中提出的

cat
中,当我按下
ESC
或其他控制键时,Bash使用插入符号表示它们。图中显示我按下了ESC键,但Bash显示为
^[

然而,如果我想在脚本中编写彩色文本,例如通过
echo
,我似乎必须使用ANSI转义序列

该图显示插入符号在
echo
中不起作用,但ANSI转义序列起作用

我可以说我们必须使用ANSI转义序列来输入ESC键,但是Bash将使用插入符号来表示它吗

有没有一种方法可以通过插入符号输入ESC键?Bash可以表示ANSI转义序列中输入的键吗

请注意,我实际上使用的是ZSH。您可以讨论任何一个shell

我可以说我们必须使用ANSI转义序列来输入ESC键吗

不,使用特殊键盘或配置,您可以像输入任何其他字符一样从键盘输入
\033
字节

,但是Bash将使用插入符号来表示它

我相信Bash没有使用插入符号。终端在执行程序时显示未损坏的ESC字符时显示为
^[
。您可以执行
sleep 20
并按ESC键,结果相同。您可以在不使用Bash的情况下执行终端窗口,并使用
sleep 20
,它还将打印
^[
按ESC键时

有没有办法用插入符号输入ESC键

我不知道有什么程序能做到这一点,但编写一个简短的脚本将插入符号转换为字节只需几分钟的工作 我可以说我们必须使用ANSI转义序列来输入ESC键吗

不,使用特殊键盘或配置,您可以像输入任何其他字符一样从键盘输入
\033
字节

,但是Bash将使用插入符号来表示它

我相信Bash没有使用插入符号。终端在执行程序时显示未损坏的ESC字符时显示为
^[
。您可以执行
sleep 20
并按ESC键,结果相同。您可以在不使用Bash的情况下执行终端窗口,并使用
sleep 20
,它还将打印
^[
按ESC键时

有没有办法用插入符号输入ESC键

我不知道有什么程序能做到这一点,但编写一个简短的脚本将插入符号转换为字节只需要几分钟的工作

$echo'CTRL+VESC[31mhello'

完成后,它会显示给你

$ echo '^[[31mhello'
在bash中可能需要
set-ovi

但是,最好的方法是使用
tput

$ tput setaf 9; echo hello; tput sgr0
如果你打字

$echo'CTRL+VESC[31mhello'

完成后,它会显示给你

$ echo '^[[31mhello'
在bash中可能需要
set-ovi

但是,最好的方法是使用
tput

$ tput setaf 9; echo hello; tput sgr0

请不要发布文本图片…@KamilCuk我认为我无法在SO上用彩色书写文本。@GQnbig:我建议您删除zsh或bash标记,一次只关注一个shell。请不要发布文本图片…@KamilCuk我认为我无法在SO上用彩色书写文本。@GQnbig:我建议您删除其中任何一个他使用zsh或bash标记,一次只关注一个shell。感谢您回答我的每个问题。似乎我可以得出结论,将ESC输入bash/Linux/terminal的最后一步是使用ANSI转义序列。您的
sed
示例转换为^[发送到ANSI,然后发送到Bash,除非您显示一个shell或一个直接使用插入符号的著名程序,否则您的sed会将ANSI转换为插入符号。也许我不理解基本概念。“符号”是指表示事物,而“转义”是指输入吗?因此要求Bash/Terminal/Linux使用“转义”是毫无意义的“表示事物吗?
然后发送到Bash
否,它在终端上输出它。Bash只将程序的输出重定向到终端,数据不通过shell,而是按原样显示。
您的sed将ANSI转换为插入符号
我不明白,它转换了两个字符
^[
转换为字节
\x1b
不多不少。
表示“符号”的意思是在“转义”时表示事物吗“平均输入?
转义通常是指在字符前面加上另一个字符,以通知读者一个特殊的含义。符号是表示事物的标准方式。27等于
0x1b
等于
\033
?它是用不同的“符号”表示的完全相同的数字。”,其中
\0
0x
是表示八进制和十六进制数的转义序列。我们人类使用10进制“符号”来表示数字。10进制中的27也等于
^[
插入符号。感谢您回答我的每一个问题。似乎我可以得出结论,将ESC输入到bash/Linux/terminal的最后一步是使用ANSI转义序列。您的
sed
示例转换为^[发送到ANSI,然后发送到Bash,除非您显示一个shell或一个直接使用插入符号的著名程序,否则您的sed会将ANSI转换为插入符号。也许我不理解基本概念。“符号”是指表示事物,而“转义”是指输入吗?因此要求Bash/Terminal/Linux使用“转义”是毫无意义的“表示事物吗?
然后发送到Bash
否,它在终端上输出它。Bash只将程序的输出重定向到终端,数据不通过shell,而是按原样显示。
您的sed将ANSI转换为插入符号
我不明白,它转换了两个字符
^[
转换为字节
\x1b
不多不少。
表示“符号”的意思是表示事物,而“转义”表示事物
$ echo '^[[31mhello'
$ tput setaf 9; echo hello; tput sgr0