Bash
ls 的輸出有換行符,但顯示在一行上。為什麼?
我想我可能忽略了關於 shell 的一個相對基本的觀點。預設情況下,ls命令的輸出用換行符分隔輸出,但 shell 在單行上顯示輸出。
誰能給我解釋一下?我一直認為輸出只是用空格分隔,但現在我看到輸出用換行符分隔,我希望輸出顯示在單獨的行上。
例子:
cpoweradm@debian:~/lpi103-4$ ls text* text1 text2 text3
od顯示輸出由換行符分隔:
cpoweradm@debian:~/lpi103-4$ ls text* | od -c 0000000 t e x t 1 \n t e x t 2 \n t e x t 0000020 3 \n 0000022
如果存在換行符,那麼為什麼輸出不顯示為:
text1 text2 text3
當您通過管道輸出輸出時,
ls
行為會有所不同。這個事實隱藏在資訊文件中:
如果標準輸出是終端,則輸出按列(垂直排序),控製字元作為問號輸出;否則,輸出每行列出一個,控製字元按原樣輸出。
為了證明這一點,嘗試執行
ls
然後
ls | less
這意味著如果您希望保證輸出是每行一個文件,無論它是通過管道傳輸還是重定向,您都必須執行
ls -1
(
-1
是第一名)或者,您可以通過執行強制
ls | less
在列中輸出ls -C
(
-C
是大寫的C)