为什么不抨击接受我的颜色编码?

时间:2016-12-05 01:09:25

标签: bash shell colors

我有一个简单的代码设置,但无论出于什么原因它拒绝操作它应该如何

#!/bin/bash
RED='\033[0:31m'
RESET='\033[0m'

基本上这些都是一些简单的颜色编码

我接下来的事情是

for file in ./dir/*.c; do
echo "File [${RED}$file${RESET}] has been launched"

我的预期结果是

  

文件[myprogram.c]已启动(名称为红色)

相反,它只是拒绝编码颜色和转储

  

文件[\ 033 [0:31m]已经启动

知道我做错了吗?

2 个答案:

答案 0 :(得分:3)

首先因为红色是week_number = "week1" student_id = "1" 。你写的东西意味着别的东西,如下所示 然后,因为需要解释代码 这不起作用:

'\033[31m'

但这会:

$ red='\033[31m'

$ echo "${red}Hello"

或者,您可以将解释的值分配给变量:

$ red='\033[31m'

$ echo -e "${red}Hello"

然后不需要解释转义:

$ red="$(echo -e '\033[31m')"
$ red="$(printf '\033[31m')"

你所写的内容(除了使用分号应该是冒号)是设置前景的“粗体”,或者$ echo "${red}Hello" 表示瘦/亮,0表示粗体/亮。

1

另外,$ printf '\033[31mHello\033[0;31mHello\033[1;31mHello' 用于前景3x用于背景:

4x

可以打印一张完整的表格:

$ printf '\033[31;42mHello\033[0;44;31mHello\033[1;43;31mHello\033[0m'

enter image description here

答案 1 :(得分:1)

  

使用tput

#!/bin/bash
red=$(tput setaf 1)
reset=$(tput sgr0)
for file in ./dir/*.c; do
 echo "File [${red}$file${reset}] has been launched"
done
  

with printf

#!/bin/bash
RED='\033[0;31m'
RESET='\033[0m'
for file in ./dir/*.c; do
 printf  "File [${RED}$file${RESET}] has been launched"
done