DESIGN / CODE / INFRA / AI

解説

シェルの「|」と「>」は何が違う?次のコマンドへ渡すか、ファイルへ保存するかを試そう

コマンドの後ろにある「|」と「>」。どちらも出力を動かすように見えるけれど、行き先と役割が違うよ。小さな文字列で比べてみよう。

シェルの「|」と「>」は何が違う?次のコマンドへ渡すか、ファイルへ保存するかを試そう
保存リストを見る →
この記事の道しるべ 6項目

コマンドの後ろにある「|」と「>」。どちらも出力を動かすように見えるけれど、行き先と役割が違うよ。小さな文字列で比べてみよう。

Bashと、wc・catが使える環境を用意する。空の練習フォルダーで試し、本当の資料と同じ名前のファイルを使わない。このページではWebブラウザの中でコマンドは実行しないよ。

まず標準出力を知る

標準出力は、コマンドが通常の結果を送り出すための出力先。いつも画面と決まっているわけではなく、次のコマンドやファイルへつなぐこともできる。

標準入力は、コマンドが内容を受け取る入り口。この二つをつなぐのが、ここで使うパイプ「|」だよ。

printf 'apple\npear\n' | wc -l

printfは二行の文字を出力し、wc -lがそれを受け取って改行の数を数える。この例の結果は2。見える空白の数や整列の仕方は、環境で違うことがある。

「>」ならファイルへ向ける

mkdir pipe-save-practice
cd pipe-save-practice
printf 'apple\npear\n' > fruit.txt
cat fruit.txt

この例では結果をfruit.txtへ書き、catで読み直す。最初の行で画面に果物が出ないのは、標準出力の行き先をファイルへ変えたからだよ。

重要なのは、>が既存ファイルを通常は上書きすること。Bashのnoclobberなど設定によっては上書きが拒否される場合もあるが、普段から内容を保護してくれると頼り切らないようにしよう。

組み合わせると、数えた結果を残せる

printf 'apple\npear\n' | wc -l > count.txt
cat count.txt

最初の出力はwcへ渡り、その結果がcount.txtへ保存される。fruit.txtの二行と、count.txtの数値2は、保存しているものが違うんだ。編集部では、この三つの例をBashで実行し、二行の内容と、数を保存した結果を確認した。

書き方 出力の主な行き先
printf ... 通常は画面など、引き継いだ標準出力
printf ... | wc -l wcの標準入力
printf ... > fruit.txt ファイル
printf ... | wc -l > count.txt wcで数えた後、ファイル

エラーも全部つながるわけではない

通常の「|」がつなぐのは標準出力。標準エラーという別の出力先は、そのまま画面へ出ることがある。エラーまで消えた、または全部保存できたと決めつけないようにしよう。

また、通常のBashではパイプラインの終了状態は最後のコマンドの状態になる。最後が成功しても、途中の失敗を見逃す場合があるので、重要な処理は各段階の確認やpipefailの設計も必要になるよ。

うまくいかないとき

行数が0なら、wc -lは文字の行の見た目ではなく、改行を数える点を確認する。保存先が見つからないなら、pwdとファイル名を見る。練習用の二つのファイルは、内容を確かめてから自分のファイル管理画面で片付ければよいよ。

別の出力先は標準出力と標準エラー、操作場所はpwdとcdへ。

参照した公式資料

確認日:2026年10月25日。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。