Так grepкак это программа GNU, другой вариант может быть смотреть на исходный код.
Внутренне grep проверяет static int color_optionлибо либо 0, 1либо 2.
0 никогда не используйте цветной вывод
1 всегда используйте цвета
2 использовать цвета только при печати на терминал
Теперь, когда вы --color=autoпередаете команду grep в качестве аргумента для вашего CLI, она внутренне устанавливает переменную color_optionв 2.
Если color_optionравно, 2 grepто в дальнейшем проверяется, STDOUTсвязан ли он с терминалом или пользователь отключил раскрашенный вывод через shell environment variables. Если первый вариант верен и цветная grepпечать разрешена, то продолжается оценка того, какие цвета следует использовать, и, в конце концов, в конце выдает CLIцвет.
источник: (grep 2.21)
grep.c line 306, 2374, 2440
colorize-posix.c line 36
man isatty
less -Rвы можете получить подсветку совпадений, но вам нужно указать--color=alwaysgrep, чтобы он работал.