在 echo 命令中更改字体

Sar*_*use 21 shell bash zsh fonts

是否可以在 zsh 或 bash 中更改 echo 输出的字体属性?

我想要的是类似于:

echo -n "This is the font: normal "
echo -n $font=italic "italic,"
echo -n $font=bold "bold,"
echo -n "and"
echo -n $font=small "small".
Run Code Online (Sandbox Code Playgroud)

以便在一行文本中打印:“这是字体:普通、斜体粗体”。

Gil*_*il' 22

在大多数(如果不是全部)终端模拟器上,您不能设置不同的字体大小或不同的字体,只能设置颜色和一些属性(粗体、下划线、突出)。

在 bash(或在 zsh 或任何其他 shell)中,您可以直接使用终端转义序列(除了一些奇异的,这些天所有终端都遵循 xterm 的引导)。CSIESC [,用$'\e['bash编写。更改属性的转义序列是CSI Ps m.

echo $'\e[32;1mbold red\e[0mplain\e[4munderlined'
Run Code Online (Sandbox Code Playgroud)

Zsh 有一个方便的功能

autoload -U colors
colors
echo $bold_color$fg[red]bold red${reset_color}plain$'\e['$color[underline]munderlined
Run Code Online (Sandbox Code Playgroud)

或者可以将其作为提示扩展的一部分,也可以使用print -P,或% 参数扩展标志

print -P '%F{red}%Bbold%b red%f %Uunderline%u'
Run Code Online (Sandbox Code Playgroud)


Geo*_*e M 19

您可以在脚本或源文件中包含这些颜色定义。可能看起来像这样。

#!/bin/bash
PATH=/bin:/usr/bin:

NONE='\033[00m'
RED='\033[01;31m'
GREEN='\033[01;32m'
YELLOW='\033[01;33m'
PURPLE='\033[01;35m'
CYAN='\033[01;36m'
WHITE='\033[01;37m'
BOLD='\033[1m'
UNDERLINE='\033[4m'

echo -e "This text is ${RED}red${NONE} and ${GREEN}green${NONE} and ${BOLD}bold${NONE} and ${UNDERLINE}underlined${NONE}."

tput sgr0
Run Code Online (Sandbox Code Playgroud)

请注意,您应该在每次调用更改后重置 ANSI 颜色代码。该tput sgr0重置您在终端所做的所有更改。

我相信更改字体大小或斜体将特定于您使用的终端。

虽然本指南专门针对自定义 bash 提示,但它是一个很好的颜色代码参考,并提供了一些关于您可以做什么的想法。


use*_*own 6

看来,如果布局不能处理[0x1b]在前面字符数限制[

第一行加粗:

 echo -e "\x1b[1m bold"
     echo -e "\x1b[30m black"
     echo -e "\x1b[31m red"
     echo -e "\x1b[32m green"
     echo -e "\x1b[33m yellow"
     echo -e "\x1b[34m blue"
     echo -e "\x1b[35m mag"
     echo -e "\x1b[36m cyan"
     echo -e "\x1b[37m white"   
Run Code Online (Sandbox Code Playgroud)

对于一般类型,我只知道

echo -e "\x1b[0m io-std"
echo -e "\x1b[1m bold"
echo -e "\x1b[2m normal"
Run Code Online (Sandbox Code Playgroud)

从评论中,感谢 manatwork 和 GypsyCosmonaut:

echo -e "\x1b[3m italic"
echo -e "\x1b[4m underlined"
echo -e "\x1b[5m blinking"
echo -e "\x1b[7m inverted"
Run Code Online (Sandbox Code Playgroud)

并且不知道 io-std 和 normal 之间的区别。

我还没有在外壳中看到斜体或小号。

您可以在 Bash 中通过 Ctrl +输入它们(也感谢 manatwork) v ESC ,它将显示为^[. 这意味着整个 ANSI 序列看起来像^[[1m bold^[[1mbold(以避免“粗体”之前的空白)。

许多编辑器对 (char)0x1b 有问题。替代方案:从某处复制/粘贴它,或使用

echo -e "\x1b[1m bold"
Run Code Online (Sandbox Code Playgroud)

在 bash 或十六进制编辑器中。

或者,更简单:

echo -e "\e[1m bold"
Run Code Online (Sandbox Code Playgroud)

\e是 ASCII 码 27、bash 内部命令 echo 以及外部程序 GNU-echo 的转义序列。