grep --color 默认为 =auto 还是 =always?

Onl*_*Cop 5 grep colors

grep --color如果未指定[ =WHEN ] ,则默认颜色行为是什么?

grep手册页指出:

--color[=什么时候], --colour[=什么时候]

    用转义序列包围匹配的(非空)字符串、匹配行、上下文行、文件名、行号、字节偏移量和分隔符(用于字段和上下文行组),以在终端上以颜色显示它们。...  WHENneveralwaysauto

默认 [ =WHEN ] 是否grep --color变为:

grep --color=auto
Run Code Online (Sandbox Code Playgroud)

或者

grep --color=always
Run Code Online (Sandbox Code Playgroud)

还是取决于实现和平台?

在我使用 GNU grep 2.16 对 Ubuntu 14.04 进行的测试中:

echo "foo bar" | \grep --color foo
Run Code Online (Sandbox Code Playgroud)

结果,而foobar

echo "foo bar" | \grep --color foo | \grep --color bar
Run Code Online (Sandbox Code Playgroud)

结果是foobar,所以它似乎grep --color=auto在这里生效。但是,我没有在 Windows 或 Mac 上测试过;我不知道这种行为是否普遍。

[ =WHEN ] 的默认值ls --color与手册页的ls状态略有不同:

--color[=]

    为输出着色。  WHEN默认为alwaysor 可以是neveror auto

在这里,缺少WHEN的行为是明确的。

mos*_*svy 16

它默认为auto.

grep --color和写作一样--color=auto

这似乎记录不足,或者他们认为简单的--color已弃用,但这可以从测试和源代码中看出:

  case COLOR_OPTION:
    if (optarg)
      {
        if (!strcasecmp (optarg, "always") || !strcasecmp (optarg, "yes")
            || !strcasecmp (optarg, "force"))
          color_option = 1;
        else if (!strcasecmp (optarg, "never") || !strcasecmp (optarg, "no")
                 || !strcasecmp (optarg, "none"))
          color_option = 0;
        else if (!strcasecmp (optarg, "auto") || !strcasecmp (optarg, "tty")
                 || !strcasecmp (optarg, "if-tty"))
          color_option = 2;
        else
          show_help = 1;
      }
    else
      color_option = 2;
    break;
Run Code Online (Sandbox Code Playgroud)

请注意,缺少 aoptarg与等于autoor的结果相同tty