Provided by: manpages-ja_0.5.0.0.20080615-1_all bug

IF-THEN-ELSE

   Cã‚å®ãƒç’ã‚æ˜å½æŽå¼
       diff  を用いて  2  ファイルの  C  ソースコードをマージすることもでい襦
       この出力形式には、両方のファイルの行がすべて含まれる。
       両方のファイルに共通な行は一度しか登場しない。      異なる部分は      C
       プリプロセッサの指定を用いて分離される。  #ifdef  NAME  または  #ifndef
       NAME,  ,BR  #else  ",  and  "  #endif である。 出力をコンパイルすると-
       、マクロ      NAME       を定義したり、未定義のままにすることによって、
       どちらのバージョンを使うかを選択でい襦

       例えば、`wait   (&s)'   というインスタンスを   `waitpid  (-1,  &s,  0)'
       に変更し、新旧のファイルを                       `--ifdef=HAVE_WAITPID'
       オプションによってマージすると、
       影響を受けた部分のコードは以下のようになるだろう:

           do {
        #ifndef HAVE_WAITPID
                 if ((w = wait (&s)) < 0 && errno != EINTR)
        #else /* HAVE_WAITPID */
                 if ((w = waitpid (-1, &s, 0)) < 0  &&  errno != EINTR)
        #endif /* HAVE_WAITPID */
                 return w;
           } while (w != child);

  è¡åœã‚å“ãƒè¥ãƒç’ãƒå¼å½æŽå¼
       行グループ形式を用いると、                                 if-then-else
       入力を受け入れる多くのアプリケーションに適した形式を指定でい襦
       例えばプログラミング言語や文書整形言語などが挙げられる。
       行グループ形式は、
       似ている行からなる隣接したグループの出力形式を指定する。

       例えば、以下のコマンドは TeX ファイル `old'  と  `new'  を比較し、  old
       の部分を      `\begin{em}'-`\end{em}'     で囲み、     new     の部分を
       `\begin{bf}'-`\end{bf}' で囲んでマージしたかたちで出力する。

        diff \
           --old-group-format='\begin{em}
        %<\end{em}
        '  \
           --new-group-format='\begin{bf}
        %>\end{bf}
        '  \
           old new

       以下のコマンドも上気領磴汎韻犬世、やや欺劼多い。
       デフォルトの行グループ形式も指定しているからである。

        diff \
           --old-group-format='\begin{em}
        %<\end{em}
        ' \
           --new-group-format='\begin{bf}
        %>\end{bf}
        ' \
           --unchanged-group-format='%=' \
           --changed-group-format='\begin{em}
        %<\end{em}
        \begin{bf}
        %>\end{bf}
        '  \
           old new

       次にもう少し進んだ例を紹介する。これは差分リストを、
        "plain English" スタイルで行番号を書いたヘッダとともに出力する。

        diff \
           --unchanged-group-format='' \
           --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
        %<' \
           --new-group-format='-------- %dN line%(N=1?:s) added after %de:
        %>' \
           --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
        %<-------- to:
        %>' \
           old new

       行グループ形式を指定するには、    diff   を以下のオプションのどれか   1
       つを指定して実行する。       4        つまでの行グループ形式を指定でぁ
       各指定がそれぞれ行グループ  1  つに対応する。 FORMAT にはシェルのメタ-
       ャラクタが入っていることが多いので、 クォートするべい任△蹐Α

       --old-group-format=FORMAT
              これらの行グループは 1  番目のファイルだけにある行からなる  hunk
              である。      デフォルトの      old      グループ形式は、changed
              グループ形式が指定されていれば
              それと同じになる。されていなければ行グループはそのままのかたちで出力される。

       --new-group-format=FORMAT
              これらの行グループは 2  番目のファイルだけにある行からなる  hunk
              である。      デフォルトの      new      グループ形式は、changed
              グループ形式が指定されていれば
              それと同じになる。されていなければ行グループはそのままのかたちで出力される。

       --changed-group-format=FORMAT
              これらの行グループは両方のファイルの行からなる   hunk   である。
              デフォルトの   changed   グループ形式は、   old  グループと  new
              グループの形式を連結したものである。

       --unchanged-group-format=FORMAT
              これらの行グループは両方のファイルに共通の行からなる        hunk
              である。       デフォルトの      unchanged      グループ形式は、
              行グループをそのままのかたちで出力するものである。

  ã‚å“ãƒè¥ãƒç’ãƒå½å¤å„換
       %<     1 番目のファイルからの行を意味する。行末尾の改行も含む。  各行は
              old 行形式によって整形される。

       %>     2  番目のファイルからの行を意味する。行末尾の改行も含む。 各行は
              new 行形式によって整形される。

       %=     両方のファイルで共通な行を意味する。行末尾の改行も含む。  各行は
              unchanged 行形式によって整形される。

       %%     `%' を表す。

       %c'C'' ここで      C      は文字     1     文字で、C     を表す。     C
              にバックスラッシュやアポストロフィは指定でい覆ぁ 例えば `%c':''
              はコロンを表し、これは       if-then-else       形式の      then
              部分でもコロンとして解釈される。通常はコロンは              then
              部分の終わりとして扱われる。

       %c'\O''
              ここで  0  は 1 桁から 3 桁までの 8 進数字であり、8 進のコード 0
              に対応する文字を表す。例えば `%c'\0'' はナル文字になる。

       (A=B?T:E)
              A が B に等しい場合は T、 等しくない場合は E。 A と B はそれぞれ
              10    進数の定数か、上気里茲Δ鵬鮗瓩気譴詈源    1    つである。
              この形式指定は  A  の値が  B   と等しければ   T   と等価であり、
              それ以外の場合は E と等価である。

              例えば     `%(N=0?no:%dN)     line%(N=1?:s)'     は    N    (new
              ファイルからのグループの行数) が 0 なら `no lines' となり、 N が
              1 なら `1 line' となり、それ以外の場合は `%dN lines' となる。

       FN     ここで       F      は      printf(3)      の変換指定で、      N
              は以下の文字のどれかである。 「F で整形された N の値」 を表す。

              e      old ファイルからのグループの直前の行の行番号。

              f      old    ファイルからのグループの最初の行番号。e    +     1
                     に等しい。

              l      old ファイルからのグループの末尾の行番号。

              m      old   ファイルからのグループの直後の行の行番号。l   +   1
                     に等しい。

              n      old ファイルからのグループの行数。l - f + 1 に等しい。

              E, F, L, M, N
                     上気汎瑛佑 new ファイルからのグループのもの。

       printf 変換指定には %d, %o, %x, %X (それぞれ 10 進, 8 進, 小文字 16 進,
       大文字  16 進) が使える。 `%' の後には以下のオプションを順に指定でい襦
       `-'    (左詰めの指定)、整数    (フィールドの最低幅)、    ピリオドと数値
       (数値は省略可;    桁数の最小値)   である。   例えば   `%5dN'   は   new
       ファイルからのグループの行数を、  5  文字幅のフィールドに、  printf  の
       "%5d" 書式を用いて表示する。

  è¡åžå½æŽå¼
       行形式は、入力から取得された各行を          if-then-else         形式の
       行グループとして出力される際の制御を行う。

       例えば、以下のコマンドは、テゥ好箸虜犬吠儿紘充┐ 1 文字を表示して テ-
       ストを出力する。出力の最初の桁は、削除行では   `-'、   追加行では   `|'
       となり、変更されなかった行ではスペースとなる。
       この形式では、改行が必要な部分には改行を入れて出力する。

        diff \
           --old-line-format='-%l
        ' \
           --new-line-format='|%l
        ' \
           --unchanged-line-format=' %l
        ' \
          old new

       行形式を指定するには、以下のオプションのどれかを用いる。         FORMAT
       にはシェルのメタゥ礇薀タが入っていることが多いので、  クォートするべ-
       であろう。

       --old-line-format=FORMAT
              1 番目のファイルからの行だけを整形する。

       --new-line-format=FORMAT
              2 番目のファイルからの行だけを整形する。

       --unchanged-line-format=FORMAT
              両方のファイルに共通の行を整形する。

       --line-format=FORMAT
              全ての行を整形する。上-
              の全てのオプションを指定した場合に等しい。

       行形式では、普通の文字はそれ自身を表す。変換指定は                  `%'
       で始まり、以下の形式をとる:

       %l     行の内容を意味する。行末尾の改行はあっても含まない。
              この形式では、行に改行があるかどうかは無視される。

       %L     行の内容を意味する。行末尾の改行があればそれも含む。
              行に改行がなければ、改行はないままになる。

       %%     `%' を表す。

       %c'C'' ここで      C      は文字     1     文字で、C     を表す。     C
              にバックスラッシュやアポストロフィは指定でい覆ぁ 例えば `%c':''
              はコロンを表し、これは       if-then-else       形式の      then
              部分でもコロンとして解釈される。通常はコロンは              then
              部分の終わりとして扱われる。

       %c'\O''
              ここで  0  は 1 桁から 3 桁までの 8 進数字であり、8 進のコード 0
              に対応する文字を表す。例えば `%c'\0'' はナル文字になる。

       Fn     ここで      F      は      printf(3)      の変換指定で、       F
              により整形された行番号を表す。  例えば `%.5dN' は行番号を `%.5d'
              という書式で整形して表示する。   printf   変換指定の詳細は、上-
              の行グループ形式のサブセクションを見よ。

       デフォルトの行形式は                                               `%l'
       に改行文字を続けたものである。入力にタブ文字があり、
       それが出力行の桁揃えに重要である場合には、`%l'   や   `%L'   の行指定を
       タブストップの直後に置くとよい     (すなわち     `%l'      や      `%L'
       の前にタブ文字を置けばよい)。                あるいは                -t
       オプションを用いるのもよいだろう。

       行形式と行グループ形式を同時に用いると、様々な形式指定が可能となる。
       例えば、以下のコマンドは    diff   の通常の形式と似た形式の指定である。
       これを修正すれば、diff の出力を微調整することが可能になる。

        diff \
           --old-line-format='< %l
        ' \
           --new-line-format='> %l
        ' \
           --old-group-format='%df%(f=l?:,%dl)d%dE
        %<' \
           --new-group-format='%dea%dF%(F=L?:,%dL)
        %>' \
           --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
        %<---
        %>' \
           --unchanged-group-format='' \
           old new

ãƒå¦ã‚ãƒè­ã‚ãƒè‚ãƒè ãç³æ¯ç¾è¼ƒ
       diff         への         2          つの引数がディレクトリだった場合、
       両方のディレクトリにそれぞれのファイルが、
       ファイル名のアルファベット順に比較される。
       通常はファイルのペアに違いが全くなければ、何も出力しない。   しかし  -s
       オプションを用いると、同一のファイルも報告する。
       両方のディレクトリに同名のサブディレクトリがあると、      通常     diff
       は報告だけしてサブディレクトリ以下のファイルは比較しない。  しかし   -r
       オプションを用いると、
       ディレクトリツリーを辿れる限り、対応する全てのファイルを比較する。

       片方のディレクトリだけにあるファイルに対しては、                   diff
       は通常存在するファイルの内容を表示せず、
       ファイルが片方にあって他方にはないことだけを報告する。             diff
       の振舞いを変えて、
       他方のディレクトリにもファイルが空の状態で存在するかのように
       動作させることもでい襦すなわち                                    diff
       は実際に存在するファイルの内容をすべて出力する。
       (この出力は、ファイルが第    1    ディレクトリにあれば削除、    第    2
       ディレクトリにあれば挿入となる。) この指定には -N オプションを使う。

       古いほうのディレクトリに大い淵侫.ぅ襪あって、
       新しいほうにはない場合、        -N        オプションの代わりに       -P
       オプションを用いるとパッチの大い気鮠さくでい襦  -P  オプションは   -N
       オプションと似ているが、第   2   ディレクトリにあるファイルの内容だけを
       出力に挿入し、第       1       ディレクトリだけにあるファイルは無視する
       (すなわち、追加されたファイルだけを扱う)。
       そして、パッチを当てる前に消去されたファイルを削除するよう、
       パッチの先頭にパッチを当てるユーザーへの指示を書く。

       ディレクトリの比較時に特定のファイルを無視させるには、    -x    PATTERN
       オプションを用いる。シェルとは異なり、ファイル名の先頭のピリオドは、
       パターン先頭のワイルドカードにマッチする。
       シェルによって展開されないよう、 PATTERN はクォート宜罎念呂Δ戮である。
       例えば       `-x       '*.[ao]''       は       `.a'       や      `.o'
       で終わる名前のファイルをすべて無視する。
       このオプションは、複数指定するとそれぞれが邑になる。  例えば `-x 'RCS'
       -x '*,v'' というオプションを指定すると、  ファイル名が  `RCS'  だったり
       `*,v' で終わるような ファイルとサブディレクトリをすべて無視する。

è¿å±ã‚è å€¤
       diff は以下の値のどれかで終了する:

       0      全く変更がなかった。

       1      変更があった。

       2      何らかのエラーが起こった。

é–æ…é€é çŒç›®
       cmp(1), comm(1), diff3(1), ed(1), patch(1), pr(1), sdiff(1)

æ³èºæ„
       プログラムのバグについては  bug-gnu-utils@gnu.org  へ報告してください。
       ページの更新は  Ragnar  Hojland  Espinosa   <ragnar@ragnar-hojland.com>
       が行っています。