脚本中带有颜色选项的 echo 命令和命令的工作方式不同

脚本中带有颜色选项的 echo 命令和命令的工作方式不同

如果我echo -e "\e[1;31mThis is red text\e[0m"在命令行中运行,它会打印出红色文本。

但是如果我使用在脚本文件中写入test.sh

#! /bin/bash
echo -e "\e[1;31mThis is red text\e[0m"

跑步$ sh test.sh

它打印出来 -e \e[1;31mThis is red text\e[0m

他们为何表现不同?

答案1

echo是 Bash 和 dash ( ) 中的内置 shell /bin/sh。如果您echo从命令行运行,则使用内置 Bash;如果您使用 运行 shell 脚本,则sh使用内置 Dash。

dash 版本echo不知道-e选项,只是逐字输出任何内容,而没有对\序列进行任何特殊处理。

使用 Bash 运行你的 shell 脚本,或者/bin/echo使用echo

/bin/echo -e "\e[1;31mThis is red text\e[0m"

为了避免不同版本的问题,echo您可能希望改用printf。与echo printf始终解释序列相反,但不会在末尾自动添加换行符,因此如果需要,\您必须在末尾附加换行符。\n

由于某些版本printf不理解,\e您应该使用\033

printf "\033[1;31mThis is red text\033[0m\n"

答案2

这需要正确的命令和正确的格式。

正确的 echo 语句:echo "Hello World!"

带颜色的正确回显语句:echo "\e[1;31mHello World!\e[0m"

为 Bash 脚本添加颜色是非常简单但容易混淆的事情之一。=)

本网站可以帮你清楚地解释这一切。我经常用它作为参考,因为谁能记住所有正确的颜色代码呢?哈哈

答案3

不要用它运行sh test.sh,它会像你说的那样以白色打印文本。创建脚本后,通过运行使其可执行,

sudo chmod +x /path/test.sh

在此处输入图片描述

sudo使用、likesudo ./test.sh或both运行脚本./test.sh即可。

或者

使用 运行脚本bash

bash /path/test.sh

相关内容