เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | Contents | ถัดไป>

printf – จัดรูปแบบและพิมพ์ข้อมูล

ต่างจากคำสั่งอื่นๆ ในบทนี้ the printf คำสั่งไม่ได้ใช้สำหรับไพพ์ไลน์ (ไม่ยอมรับอินพุตมาตรฐาน) และไม่พบแอพพลิเคชั่นบ่อยครั้งบนบรรทัดคำสั่งโดยตรง (ส่วนใหญ่จะใช้ในสคริปต์) เหตุใดจึงสำคัญ เพราะมันใช้กันอย่างแพร่หลาย

printf (จากวลี “print formatted”) เดิมพัฒนาขึ้นสำหรับภาษาโปรแกรม C และได้นำไปใช้ในภาษาการเขียนโปรแกรมหลายภาษารวมถึงเชลล์ด้วย อันที่จริงแล้วใน bash printf เป็น buildin

printf ทำงานดังนี้:

พิมพ์f “รูป" ข้อโต้แย้ง

คำสั่งจะได้รับสตริงที่มีคำอธิบายรูปแบบซึ่งนำไปใช้กับรายการอาร์กิวเมนต์ ผลลัพธ์ที่จัดรูปแบบจะถูกส่งไปยังเอาต์พุตมาตรฐาน นี่คือตัวอย่างเล็กน้อย:



[me@linuxbox ~]$ printf "ฉันจัดรูปแบบสตริง: %s\n" foo

ฉันจัดรูปแบบสตริง: foo

[me@linuxbox ~]$ printf "ฉันจัดรูปแบบสตริง: %s\n" foo

ฉันจัดรูปแบบสตริง: foo


สตริงรูปแบบอาจมีข้อความตามตัวอักษร (เช่น "ฉันจัดรูปแบบสตริง:") ลำดับหลีก (เช่น \n, อักขระขึ้นบรรทัดใหม่) และลำดับที่ขึ้นต้นด้วย % ลักษณะที่เรียกว่า ข้อกำหนดการแปลง. ในตัวอย่างข้างต้น ข้อมูลจำเพาะการแปลง %s ใช้เพื่อจัดรูปแบบสตริง "foo" และวางไว้ในเอาต์พุตของคำสั่ง นี่คืออีกครั้ง:



[me@linuxbox ~]$ printf "ฉันจัดรูปแบบ '%s' เป็นสตริงแล้ว\n" foo

ฉันจัดรูปแบบ 'foo' เป็นสตริง

[me@linuxbox ~]$ printf "ฉันจัดรูปแบบ '%s' เป็นสตริงแล้ว\n" foo

ฉันจัดรูปแบบ 'foo' เป็นสตริง


อย่างที่เราเห็นไฟล์ %s ข้อมูลจำเพาะการแปลงจะถูกแทนที่ด้วยสตริง “foo” ในเอาต์พุตของคำสั่ง การแปลงจะใช้เพื่อจัดรูปแบบข้อมูลสตริง มีตัวระบุอื่นๆ สำหรับข้อมูลประเภทอื่นๆ ตารางนี้แสดงรายการประเภทข้อมูลที่ใช้กันทั่วไป:


ตาราง 21-4: ตัวระบุชนิดข้อมูลทั่วไปของ printf


คำอธิบายตัวระบุ

คำอธิบายตัวระบุ

d จัดรูปแบบตัวเลขเป็นจำนวนเต็มทศนิยมที่มีเครื่องหมาย


ภาพ

f จัดรูปแบบและส่งออกตัวเลขทศนิยม


ภาพ

o จัดรูปแบบจำนวนเต็มเป็นเลขฐานแปด


ภาพ


ภาพ

s จัดรูปแบบสตริง


ภาพ

x จัดรูปแบบจำนวนเต็มเป็นเลขฐานสิบหกโดยใช้ตัวพิมพ์เล็ก af เมื่อจำเป็น


ภาพ

X เหมือนกับ x แต่ใช้อักษรตัวพิมพ์ใหญ่


ภาพ

% พิมพ์สัญลักษณ์ % ตามตัวอักษร (เช่น ระบุ “%%”)


ภาพ


เราจะสาธิตผลกระทบของตัวระบุ Conversion แต่ละรายการในสตริง "380":



[me@linuxbox ~]$ printf "%d, %f, %o, %s, %x, %X\n" 380 380 380 380

380 380

380, 380.000000, 574, 380, 17c, 17C

[me@linuxbox ~]$ printf "%d, %f, %o, %s, %x, %X\n" 380 380 380 380

380 380

380, 380.000000, 574, 380, 17c, 17C


เนื่องจากเราระบุตัวระบุการแปลงหกตัว เราจึงต้องระบุอาร์กิวเมนต์หกตัวสำหรับ

printf เพื่อประมวลผล ผลลัพธ์ทั้ง XNUMX รายการแสดงผลของตัวระบุแต่ละตัว

อาจมีการเพิ่มส่วนประกอบเสริมหลายตัวลงในตัวระบุการแปลงเพื่อปรับเอาท์พุต ข้อกำหนดการแปลงที่สมบูรณ์อาจประกอบด้วยสิ่งต่อไปนี้:

%[ธง][ความกว้าง][.ความแม่นยำ]conversion_spec

เมื่อใช้ส่วนประกอบเสริมหลายตัว จะต้องปรากฏในลำดับที่ระบุด้านบนจึงจะตีความได้อย่างเหมาะสม นี่คือคำอธิบายของแต่ละรายการ:


ตารางที่ 21-5: ส่วนประกอบข้อมูลจำเพาะการแปลง printf


คำอธิบายส่วนประกอบ

คำอธิบายส่วนประกอบ

ธง มีห้าธงที่แตกต่างกัน:


ภาพ

# – ใช้ “รูปแบบอื่น” สำหรับผลลัพธ์ ซึ่งจะแตกต่างกันไปตามประเภทข้อมูล สำหรับการแปลง o (เลขฐานแปด) ผลลัพธ์จะถูกนำหน้าด้วย

0 สำหรับการแปลง x และ X (เลขฐานสิบหก) ผลลัพธ์จะถูกนำหน้าด้วย 0x หรือ 0X ตามลำดับ


ภาพ

0–(ศูนย์) แพดเอาต์พุตด้วยศูนย์ ซึ่งหมายความว่าฟิลด์นี้จะเต็มไปด้วยศูนย์นำหน้า เช่นใน “000380”


ภาพ

- – (เส้นประ) จัดตำแหน่งเอาต์พุตให้ชิดซ้าย ตามค่าเริ่มต้น printf จะจัดเอาต์พุตให้ชิดขวา


ภาพ

' ' – (ช่องว่าง) สร้างช่องว่างนำหน้าสำหรับจำนวนบวก


ภาพ

+ – (เครื่องหมายบวก) เซ็นตัวเลขบวก โดยค่าเริ่มต้น printf only


ภาพ


ภาพ

สัญญาณตัวเลขติดลบ


ภาพ

width ตัวเลขที่ระบุความกว้างฟิลด์ต่ำสุด


ภาพ

.ความแม่นยำ สำหรับตัวเลขทศนิยม ให้ระบุจำนวนหลักของความแม่นยำที่จะส่งออกหลังจุดทศนิยม สำหรับการแปลงสตริง ความแม่นยำ ระบุจำนวนอักขระที่จะส่งออก


ภาพ


ต่อไปนี้คือตัวอย่างบางส่วนของรูปแบบต่างๆ ในการใช้งานจริง:


ตาราง 21-6: ตัวอย่างข้อมูลจำเพาะการแปลงการพิมพ์


ข้อโต้แย้ง

รูปแบบ

ผล

หมายเหตุ :

380

"%NS"

380

การจัดรูปแบบอย่างง่ายของ an

จำนวนเต็ม.

380

"%#NS"

0x17c

จำนวนเต็มอยู่ในรูปแบบ a

เลขฐานสิบหกโดยใช้

ธง "รูปแบบอื่น"

380

"%05d"

00380

จำนวนเต็มจัดรูปแบบด้วย

ศูนย์นำหน้า (แพ็ดดิ้ง)

และความกว้างของฟิลด์ขั้นต่ำ

จากห้าตัวอักษร

380

"%05.5f"

380.00000

ตัวเลขในรูปแบบ a

เลขทศนิยมด้วย

ช่องว่างภายในและทศนิยมห้าตำแหน่ง

สถานที่ที่มีความแม่นยำ ตั้งแต่

ขั้นต่ำที่กำหนด

ความกว้างของฟิลด์ (5) น้อยกว่า

ความกว้างที่แท้จริงของ

จัดรูปแบบตัวเลข, the

เบาะไม่มีผล

380

"%010.5f"

0380.00000

โดยการเพิ่ม

ความกว้างของฟิลด์ขั้นต่ำถึง10

ช่องว่างภายในสามารถมองเห็นได้ในขณะนี้

380

"%+d"

+380

แฟล็ก + เป็นสัญญาณบวก

จำนวน.

380

"%-NS"

380

ธง - ด้านซ้ายจัดตำแหน่ง

การจัดรูปแบบ


abcdefghijk

"%5 วินาที"

abcedfghijk

สตริงที่จัดรูปแบบด้วยความกว้างฟิลด์ต่ำสุด

abcdefghijk

"%.5s"

ABCDE

โดยการใช้ความแม่นยำกับสตริง สตริงจะถูกตัดให้สั้นลง


อีกครั้ง printf ส่วนใหญ่จะใช้ในสคริปต์ที่ใช้ในการจัดรูปแบบข้อมูลแบบตาราง มากกว่าในบรรทัดคำสั่งโดยตรง แต่เรายังคงสามารถแสดงให้เห็นได้ว่าสามารถนำไปใช้แก้ปัญหาการจัดรูปแบบต่างๆ ได้อย่างไร ขั้นแรก ให้ส่งออกบางฟิลด์โดยคั่นด้วยอักขระแท็บ:



[me@linuxbox ~]$ printf "%s\t%s\t%s\n" str1 str2 str3

str1 str2 str3

[me@linuxbox ~]$ printf "%s\t%s\t%s\n" str1 str2 str3

str1 str2 str3


โดยการใส่ \t (ลำดับการหลบหนีสำหรับแท็บ) เราบรรลุผลตามที่ต้องการ ถัดไป ตัวเลขบางตัวที่มีการจัดรูปแบบเรียบร้อย:



[me@linuxbox ~]$ printf "บรรทัด: %05d %15.3f ผลลัพธ์: %+15d\n" 1071 3.14156295 32589

ไลน์: 01071 3.142 ผล: +32589

[me@linuxbox ~]$ printf "บรรทัด: %05d %15.3f ผลลัพธ์: %+15d\n" 1071 3.14156295 32589

ไลน์: 01071 3.142 ผล: +32589


สิ่งนี้แสดงให้เห็นผลกระทบของความกว้างของฟิลด์ขั้นต่ำต่อระยะห่างของฟิลด์ หรือวิธีการจัดรูปแบบหน้าเว็บขนาดเล็ก:



[me@linuxbox ~]$ พิมพ์ " \n\t \n\t\t %NS \NS

\NS \n\t \n\t\t %NS \n\t \NS \n" "หน้าหัวเรื่อง" "เนื้อหาของหน้า"

ชื่อหน้า

เนื้อหาของหน้า

[me@linuxbox ~]$ พิมพ์ " \n\t \n\t\t %NS \NS

\NS \n\t \n\t\t %NS \n\t \NS \n" "หน้าหัวเรื่อง" "เนื้อหาของหน้า"

ชื่อหน้า

เนื้อหาของหน้า


ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: