web-dev-qa-db-ja.com

grep --colorのデフォルトは= autoまたは= alwaysですか?

[= WHEN]が指定されていない場合のgrep --colorのデフォルトの色の動作は何ですか?

Grep man page の状態:

--color [= [〜#〜] when [〜#〜]]、--colour [= [〜#〜] when [〜#〜]]

    一致した(空ではない)文字列、一致する行、コンテキスト行、ファイル名、行番号、バイトオフセット、およびセパレーター(フィールドとコンテキスト行のグループ用)をエスケープシーケンスで囲み、それらを端末で色で表示します。 ... [〜#〜] when [〜#〜] isneveralways、またはauto

grep --colorのデフォルト[= WHEN]は次のようになりますか?

grep --color=auto

または

grep --color=always

それとも実装とプラットフォームに依存しますか?

GNU grep 2.16を使用したUbuntu 14.04での私のテストでは:

echo "foo bar" | \grep --color foo

結果はfoobarになりますが、

echo "foo bar" | \grep --color foo | \grep --color bar

結果はfoobarになるため、ここではgrep --color=autoが有効になっているようです。ただし、これはWindowsまたはMacではテストしていません。この動作が普遍的であるかどうかはわかりません。

この[= WHEN]のデフォルトはls --colorとは少し異なります。ここで、lsのマニュアルページには次のように記載されています。

--color [= [〜#〜] when [〜#〜]]

    出力に色を付けます。 [〜#〜] when [〜#〜]デフォルトはalwaysになるか、またはneverまたはauto

ここでは、欠落している[〜#〜] when [〜#〜]の動作が明示的です。

5
OnlineCop

デフォルトは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;

optargがないと、autoまたはttyと同じになることに注意してください。

16
mosvy