GREP_COLORS 环境变量的默认值

GREP_COLORS 环境变量的默认值

在我的 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',它将被忽略。

相关内容