更改 echo 命令中的字体

更改 echo 命令中的字体

是否可以在 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".

这样它就打印出:“这是字体:正常,斜体,大胆的“在一行文本内。

答案1

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

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

echo $'\e[32;1mbold red\e[0mplain\e[4munderlined'

Zsh 有一个便捷的功能为了那个原因。

autoload -U colors
colors
echo $bold_color$fg[red]bold red${reset_color}plain$'\e['$color[underline]munderlined

或者可以将其作为迅速扩张,也用print -P,或% 参数扩展标志:

print -P '%F{red}%Bbold%b red%f %Uunderline%u'

答案2

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

#!/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

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

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

虽然这指导专门用于自定义 bash 提示符,它是颜色代码的一个很好的参考,并生成一些关于您可以做什么的想法。

答案3

似乎布局无法处理[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"   

对于一般类型,我只知道

echo -e "\x1b[0m io-std"
echo -e "\x1b[1m bold"
echo -e "\x1b[2m normal"

并在评论中感谢 manatwork 和 GypsyCosmonaut:

echo -e "\x1b[3m italic"
echo -e "\x1b[4m underlined"
echo -e "\x1b[5m blinking"
echo -e "\x1b[7m inverted"

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

我在shell中没见过斜体或小号。

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

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

echo -e "\x1b[1m bold"

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

或者,更简单:

echo -e "\e[1m bold"

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

答案4

这里:

http://en.wikipedia.org/wiki/ANSI_escape_code

(注意:其中很多通常不起作用,但大多数都这样标记。)

我正在终端中制作游戏,并且一直严重依赖上面的链接。它甚至告诉您如何隐藏/取消隐藏光标、设置颜色(30's)、“粗体”(更亮)、更暗、下划线、斜体、背景颜色(40's 而不是 30's)等。您还可以更改光标的位置(这非常有帮助 - 例如,"\x1B[1A"将光标向上移动一行;"\x1B[0;0H"将光标移动到第 0 行,第 0 列清除屏幕"\x1B[2J""\x1B[2K"

正如人们所说,为了您的目的:

echo -e "\x1b[30;44m black with blue background \x1b[m"
echo -e "\x1b[31;42m red with green background \x1b[m"
echo -e "\x1b[32;40m green with black background \x1b[m"
echo -e "\x1b[8m Invisible; na na na na boo boo \x1b[m"

笔记:需要-e

回声-e"\x1b[35;1m 浅紫色\x1b[m"

或者您需要使用单引号。键入man echo以查看原因(双引号在打印时通常很痛苦;当我需要不扩展的内容或需要 ANSI 转义序列时,我使用单引号,因为它很容易 - 尽管我已经习惯了这样做很多次- 忘记-e在这种情况下你会得到“ box with numbers and letters[35;1m”)。

每次看到时CSI将其替换为"\x1b["(或"\e[""\u1b[")。"\x1b["我认为更标准,但我真的不知道它们之间有什么区别。

相关内容