では何か? 構造のあるデータ、すなわちバイナリである。C言語*風*に書けばこんな感じ。 struct { char signature[3]; char body[n]; }; バイナリなので、shebang(“#!”)が動作しないのは当然である。 バイナリなので、catでつなぐとゴミが混じるのは当然である。 バイナリなので、grepで行頭からの前方一致に1行目が引っ掛からなくてもそれはgrepのせいではない。 バイナリなので、splitしたら1つ目のファイル以外にBOMが付かなくてもそれはsplitのせいではない。 BOMを付けるか付けないかの違いは好みの問題ではない。テキストデータを、テキストファイルとして保持するか、バイナリファイルとして保持するかの違いなのだ。