ls
(引数なし)の出力は、ファイル名を改行で区切るように見えます。
証拠:
ls | grep foo
grep
各ファイル名を個別の入力行として扱うことで、期待どおりに機能します。ls > files.txt; vim files.txt
-> Vimでは、各ファイルは別々の行にあります
さらに、ターミナルでls
は、複数のファイルが1行に出力され、ファイル名がスペースで区切られて、列が適切に配置されます。
$ ls
a.txt b.txt c.txt
だから私の質問は、lsはこれをどのように行うのですか?
改行を「偽造」するために特別な制御文字を使用していますか?または、その出力が別のコマンドにパイプされていることを知っており、この場合は出力を異なる形式にしますか?
ls
は、出力が端末であるかどうかを判断するために使用しisatty(3)
ます。