ls
ทดสอบว่าเอาต์พุตกำลังจะไปที่เทอร์มินัลหรือไม่ หากเอาต์พุตไม่ได้ไปที่เทอร์มินัลแสดงว่า-1
เป็นค่าเริ่มต้น (ซึ่งสามารถแทนที่โดยหนึ่งใน-C
, -m
หรือ-x
ตัวเลือก.)
ดังนั้นเมื่อls
ถูกนำมาใช้ในท่อและคุณยังไม่ได้แทนที่มันด้วยตัวเลือกอื่นจะใช้ ls
คุณสามารถเชื่อถือได้เนื่องจาก POSIX ต้องการการทำงานนี้-1
ข้อมูลจำเพาะ POSIX
POSIX ต้องการ-1
เป็นค่าเริ่มต้นเมื่อเอาต์พุตไม่ได้ไปที่เทอร์มินัล:
ข้อมูลจำเพาะ POSIX :
รูปแบบเริ่มต้นจะต้องแสดงรายการหนึ่งรายการต่อบรรทัดไปยังเอาต์พุตมาตรฐาน ข้อยกเว้นสำหรับเทอร์มินัลหรือเมื่อระบุหนึ่งในตัวเลือก -C, -m หรือ -x หากเอาต์พุตเป็นเทอร์มินัลรูปแบบจะถูกกำหนดโดยการนำไปใช้งาน
สามตัวเลือกเหล่านั้นซึ่งแทนที่รูปแบบคอลัมน์เดี่ยวเริ่มต้นคือ:
-C
เขียนเอาต์พุตข้อความแบบหลายคอลัมน์พร้อมกับรายการที่เรียงลำดับคอลัมน์ตามลำดับการเรียง จำนวนคอลัมน์ข้อความและตัวคั่นคอลัมน์ไม่ได้ระบุ แต่ควรปรับให้เข้ากับลักษณะของอุปกรณ์ส่งออก ตัวเลือกนี้จะปิดการใช้งานรูปแบบยาวเอาท์พุท
รูปแบบการส่งออกกระแส-m ; รายการชื่อพา ธ ทั่วทั้งหน้าคั่นด้วยอักขระ <comma> ตามด้วยอักขระ <space> ใช้อักขระ <newline> เป็น list terminator และหลังจากลำดับตัวคั่นเมื่อไม่มีที่ว่างบนบรรทัดสำหรับรายการถัดไป ตัวเลือกนี้จะปิดการใช้งานรูปแบบยาวเอาท์พุท
-x
เช่นเดียวกับ -C ยกเว้นว่าเอาต์พุตคอลัมน์หลายข้อความจะถูกสร้างขึ้นพร้อมกับรายการที่เรียงลำดับข้ามแทนที่จะเป็นคอลัมน์ ตัวเลือกนี้จะปิดการใช้งานรูปแบบยาวเอาท์พุท
เอกสาร GNU
จากGNU ls ด้วยตนเอง :
'-1'
'- รูปแบบ = คอลัมน์เดียว' แสดง
หนึ่งไฟล์ต่อบรรทัด นี่คือการเริ่มต้นสำหรับ LS เมื่อออกมาตรฐานไม่ได้เป็นขั้ว ดูเพิ่มเติมที่ตัวเลือก -b และ -q เพื่อระงับเอาต์พุตโดยตรงของอักขระบรรทัดใหม่ภายในชื่อไฟล์ [เน้นเพิ่ม]
ตัวอย่าง
ลองสร้างสามไฟล์:
$ touch file{1..3}
เมื่อเอาต์พุตไปที่เทอร์มินัล GNU ls
เลือกใช้รูปแบบหลายคอลัมน์:
$ ls
file1 file2 file3
เมื่อเอาต์พุตไปที่ไพพ์ไลน์ข้อมูลจำเพาะ POSIX ต้องการให้คอลัมน์เดี่ยวเป็นค่าเริ่มต้น:
$ ls | cat
file1
file2
file3
ข้อยกเว้นสามข้อที่แทนที่ลักษณะการทำงานของคอลัมน์เดี่ยวเริ่มต้น-m
สำหรับการคั่นด้วยเครื่องหมายจุลภาค, -C
สำหรับคอลัมน์ที่เรียงลำดับลงและ-x
สำหรับคอลัมน์ที่เรียงลำดับข้าม:
$ ls -m | cat
file1, file2, file3
$ ls -C | cat
file1 file2 file3
$ ls -x | cat
file1 file2 file3
n=0; for i in .* *; do ((n++)) ; done ; echo $n
(ดรอป. * ถ้าคุณไม่ต้องการนับพวกนั้น) หรือ:ls -1d ./.* ./* | grep '^\./' | wc -l
(เนื่องจากชื่อไฟล์ต้องไม่มี '/')