在我的 Ubuntu 20 系统上,使用该选项时的默认颜色grep
--colors=auto
是普通背景上的红色文本。可以通过向环境变量提供值来覆盖此行为GREP_COLORS
。例如,export GREP_COLORS='1;37;41'
导致grep
在红色背景上以正常文本颜色显示匹配项,然后echo $GREP_COLORS
显示刚刚设置的值。但是,echo $GREP_COLORS
导出前是一个空行。为什么会这样呢?特别是,为什么GREP_COLORS
看起来没有默认值?
答案1
为什么 GREP_COLORS 似乎没有默认值?
因为环境变量GREP_COLORS
可以使用覆盖现有的默认颜色。这并不意味着它必须使用。
这GNU grep 默认颜色定义为grep.c
:
/* The color strings used for matched text.
The user can overwrite them using the deprecated
environment variable GREP_COLOR or the new GREP_COLORS. */
static const char *selected_match_color = "01;31"; /* bold red */
static const char *context_match_color = "01;31"; /* bold red */
/* Other colors. Defaults look damn good. */
static const char *filename_color = "35"; /* magenta */
static const char *line_num_color = "32"; /* green */
static const char *byte_num_color = "32"; /* green */
static const char *sep_color = "36"; /* cyan */
static const char *selected_line_color = ""; /* default color pair */
static const char *context_line_color = ""; /* default color pair */
后来有一个函数尝试从环境变量parse_grep_colors (void)
中获取值。GREP_COLORS
如果它为空或者它的语法无效,它将被忽略。例如,如果您设置GREP_COLORS='random text'
,它将被忽略。