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 的引导)。CSI
是ESC [
,用$'\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 提示,但它是一个很好的颜色代码参考,并提供了一些关于您可以做什么的想法。
看来,如果布局不能处理[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 的转义序列。