昔、Linux 上でのコマンドのワンライナーを勉強していた頃、パイプを使って後続のコマンドに標準入力からデータを渡すのと、引数でデータを渡すのとで、具体的に何が違うのかモヤっとして調べたことがあった。
今のところ、これらはデータが通る場所が違うと考えている。標準入力は OS(カーネル) が管理する I/O 用の領域を使い、引数の場合は後続のコマンドのメモリ上のスタック領域を使っているはず。つまり、カーネルの管理する領域を使ってデータのやり取りをするか、ユーザ領域を使ってデータのやり取りをするかの違いだと思っている。
標準出力と戻り値の違いも、同じように考えている。