我正在尝试使用echo命令在终端中打印文本。
我想用红色打印文本。我该怎么做?
我正在尝试使用echo命令在终端中打印文本。
我想用红色打印文本。我该怎么做?
当前回答
red='\e[0;31m'
NC='\e[0m' # No Color
echo -e "${red}Hello Stackoverflow${NC}"
这个答案是正确的,只是对颜色的调用不应该在引号内。
echo -e ${red}"Hello Stackoverflow"${NC}
应该会成功的。
其他回答
我应该使用tput,而不是硬编码特定于当前终端的转义码。
这是我最喜欢的演示脚本:
#!/bin/bash
tput init
end=$(( $(tput colors)-1 ))
w=8
for c in $(seq 0 $end); do
eval "$(printf "tput setaf %3s " "$c")"; echo -n "$_"
[[ $c -ge $(( w*2 )) ]] && offset=2 || offset=0
[[ $(((c+offset) % (w-offset))) -eq $(((w-offset)-1)) ]] && echo
done
tput init
只为一个回声改变颜色的一个简单方法是定义这样的函数:
function coloredEcho(){
local exp=$1;
local color=$2;
if ! [[ $color =~ '^[0-9]$' ]] ; then
case $(echo $color | tr '[:upper:]' '[:lower:]') in
black) color=0 ;;
red) color=1 ;;
green) color=2 ;;
yellow) color=3 ;;
blue) color=4 ;;
magenta) color=5 ;;
cyan) color=6 ;;
white|*) color=7 ;; # white or invalid color
esac
fi
tput setaf $color;
echo $exp;
tput sgr0;
}
用法:
coloredEcho "This text is green" green
或者你可以直接使用德鲁回答中提到的颜色代码:
coloredEcho "This text is green" 2
我写了swag就是为了实现这一点。
你可以这样做
pip install swag
现在,您可以通过以下方式将所有转义命令作为txt文件安装到给定目标:
swag install -d <colorsdir>
或者更容易通过:
swag install
这将把颜色安装到~/.colors。
您可以这样使用它们:
echo $(cat ~/.colors/blue.txt) This will be blue
或者这样,我觉得更有趣:
swag print -c red -t underline "I will turn red and be underlined"
在ascinema上查看!
我刚刚将所有解决方案中的好捕获合并在一起,最终得出:
cecho(){
RED="\033[0;31m"
GREEN="\033[0;32m" # <-- [0 means not bold
YELLOW="\033[1;33m" # <-- [1 means bold
CYAN="\033[1;36m"
# ... Add more colors if you like
NC="\033[0m" # No Color
# printf "${(P)1}${2} ${NC}\n" # <-- zsh
printf "${!1}${2} ${NC}\n" # <-- bash
}
你可以称之为:
cecho "RED" "Helloworld"
这些代码在我的Ubuntu盒子上运行:
echo -e "\x1B[31m foobar \x1B[0m"
echo -e "\x1B[32m foobar \x1B[0m"
echo -e "\x1B[96m foobar \x1B[0m"
echo -e "\x1B[01;96m foobar \x1B[0m"
echo -e "\x1B[01;95m foobar \x1B[0m"
echo -e "\x1B[01;94m foobar \x1B[0m"
echo -e "\x1B[01;93m foobar \x1B[0m"
echo -e "\x1B[01;91m foobar \x1B[0m"
echo -e "\x1B[01;90m foobar \x1B[0m"
echo -e "\x1B[01;89m foobar \x1B[0m"
echo -e "\x1B[01;36m foobar \x1B[0m"
这将以不同的颜色打印字母a、b、c、d:
echo -e "\x1B[0;93m a \x1B[0m b \x1B[0;92m c \x1B[0;93m d \x1B[0;94m"
对于循环:
for (( i = 0; i < 17; i++ ));
do echo "$(tput setaf $i)This is ($i) $(tput sgr0)";
done