从我记事起,我个人在使用 bash 时使用以下方法更改输出文本的颜色:
red=$'\033[1;31m'
nc=$'\033[0m'
echo "${red}This is red text$nc"
无论是在 macOS 还是 Linux 上使用,它总是对我有用。出于好奇,为了更好地理解它的工作原理,我做了一些研究,并找到了一些不包括$
( red='\033[1;31m'
) 的答案/示例。经过一些测试,如果我不使用$
,输出颜色不会变为红色,而只是打印字符串。但是,当使用sh
而不是执行它时bash
,文本确实会改变颜色。有人可以帮我理解这是为什么吗?
我还用双引号而不是单引号对其进行了测试,它似乎只在使用sh
. 我将在下面发布示例。
这是我使用的脚本和代码:
#!/bin/bash
red=$'\033[1;31m'
nc=$'\033[0m'
echo "${red}Test 1$nc"
echo ""
##########################
red=$"\033[1;31m"
nc=$"\033[0m"
echo "${red}Test 2$nc"
echo ""
##########################
red='\033[1;31m'
nc='\033[0m'
echo "${red}Test 3$nc"
echo ""
##########################
red="\033[1;31m"
nc="\033[0m"
echo "${red}Test 4$nc"
echo ""
使用 bash 和 sh 在 macOS 上输出:
使用 bash 和 sh 在 Linux 上输出: