สับสนกับคำสั่ง printf หรือไม่?


13

ฉันต้องพิมพ์สามบรรทัดต่อไปนี้ในหนึ่งคำสั่งพิมพ์โดยไม่ต้องใช้คำสั่ง echo ดังนั้นฉันได้เลือกคำสั่ง printf นี่คือสามบรรทัด:

  Different characters can be represented and supported 
  in the print command, for example: 
  x-y, X+Y, –, +, <, >, %, $, #, &.

สิ่งที่ฉันได้ทำไปคือ:

   printf "
   Different characters can be represented and supported 
   in the print command, for example: 
   x-y, X+Y, –, +, <, >, %, $, #, &.
   "

แต่ฉันได้รับ bash error สำหรับบรรทัดที่สาม ','

ดังนั้นทุกคนจะทำให้ฉันรู้แจ้ง


โดยวิธีการที่มีความแตกต่างระหว่างprintคำprintfสั่งคำสั่ง
Flimm

คำตอบ:


12

ดีกว่าที่จะใช้:

printf "Different characters can be represented and supported\n\
in the print command, for example:\n\
x-y, X+Y, –, +, <, >, %%, $, #, &.\n"

คุณได้รับข้อผิดพลาดดังที่คนอื่น ๆ พูดที่นี่เพราะ%ตัวละครที่พิเศษและต้องหนีไป

ดูman 1 printfข้อมูลเพิ่มเติม


@ Narwen ฉันอยากให้คุณใช้ผู้ชายตลอดเวลาเมื่อคุณต้องเล่นกับตัวละครพิเศษ หากต้องการค้นหาเป็นมนุษย์ให้พิมพ์/your_string_to_searchแล้วกด Enter
Radu Rădeanu

4
ประเด็นทั้งหมดprintfคือ%ตัวละครนั้นและมันทำอะไร!
Kaz

14

%printfเป็นตัวละครพิเศษในการ นั่นคือสิ่งที่ทำให้เกิดข้อผิดพลาด %%คุณจำเป็นต้องหนีมันเป็น

$อาจถูกทดแทนเมื่ออยู่ในเครื่องหมายอัญประกาศคู่โดยเปลือกนอกดังนั้นคุณควรหลีกเลี่ยง ( \$) โดยทั่วไปแล้วจะใช้เครื่องหมายคำพูดเพียงคำเดียวง่ายกว่า


5
เครื่องหมายดอลลาร์เป็นพิเศษเฉพาะเมื่อมันตามด้วยชื่อตัวแปรที่ถูกต้องซึ่งไม่ใช่กรณีที่นี่
เกล็นแจ็คแมน

1
$variableprintfจะถูกแทนที่ด้วยเปลือกไม่ได้โดย หากคุณใส่สายของคุณด้วยคำพูดเดียวแทนคำพูดคู่จะไม่ได้รับการสอดแทรกจากเปลือกและจะได้รับการส่งโดยตรงไปยัง$ printf
Flimm

@glennjackman นอกจากเป็นพิเศษเมื่อตามด้วยชื่อตัวแปรที่ถูกต้อง (หรือไม่ว่าตัวแปรที่กำหนดไว้จริง) $ยังเป็นพิเศษในขณะที่ตาม{หรือโดยสัญลักษณ์พารามิเตอร์พิเศษหรือหนึ่งหรือมากกว่าตัวเลข อย่างไรก็ตามแนวคิดพื้นฐานของสิ่งที่คุณพูดนั้นถูกต้อง
Eliah Kagan

9

the %เป็นพิเศษสำหรับ printf: มันเป็นถ่านชั้นนำในตัวระบุรูปแบบ หากคุณต้องการเปอร์เซ็นต์ที่แท้จริงให้ใช้%%


9

มันค่อนข้างน่าแปลกใจที่เห็นว่าเมื่อคุณไม่ได้รับอนุญาตให้ใช้echoคำสั่งที่คุณเลือกที่จะใช้printfคำสั่งแทน

ทำไมไม่cat?

#!/bin/bash

cat<<'EOF'
Different characters can be represented and supported
in the print command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
EOF

แต่ฉันต้องเปลี่ยน echo ด้วยคำสั่ง print ตามคำถาม แต่ขอบคุณสำหรับความช่วยเหลือ
Narwen

2
เพื่อหลีกเลี่ยงการตีความเช่นสตริง$fooในข้อความที่ใช้แทนcat <<'EOF' cat <<EOF
Lekensteyn

4

printfคือการพิมพ์ที่จัดรูปแบบซึ่งใช้สตริงรูปแบบเป็นพารามิเตอร์แรก ส่วนที่เหลือของพารามิเตอร์ที่ใช้ในสตริงรูปแบบ สามสิ่งที่ควรจดจำเมื่อใช้printfคือ:

  1. แม้ว่าหลาย ๆ ภาษาจะมีprintfคำสั่ง / ฟังก์ชั่น / ฟังก์ชั่นพวกเขาต่างกันเล็กน้อยดังนั้นควรตรวจสอบรายละเอียดในเอกสารภาษาเฉพาะ (C, bash, php, perl, ฯลฯ )

  2. คุณไม่ควรใช้ข้อมูลที่ผู้ใช้ระบุในสตริงรูปแบบ นี่เป็นข้อบกพร่องด้านความปลอดภัยเสมอ "%s"หากคุณต้องการที่จะแสดงให้ผู้ใช้ที่จัดสตริงใช้สตริงรูปแบบเช่น

  3. ทั้งเครื่องหมายแบ็กสแลช ( \) และเครื่องหมายเปอร์เซ็นต์ ( %) เป็นอักขระยกเว้นซึ่งเปลี่ยนความหมายของอักขระต่อไปนี้หากคุณต้องการให้อักขระเลี่ยงปรากฏในเอาต์พุตของคุณจะต้องถูกหลีกเลี่ยงหรือดึงออกจากพารามิเตอร์อื่น เครื่องหมายดอลลาร์ ( $) ไม่พิเศษสำหรับ printf แต่พิเศษสำหรับเชลล์ดังนั้นโปรดระวังราคาของคุณ

printfเหมาะสำหรับการจัดรูปแบบตัวเลข ดูรายละเอียด man man


3

เป็นคนอื่นได้กล่าวถึงสัญลักษณ์พิเศษ%printf

หากคุณต้องการพิมพ์สตริงตามที่กำหนดให้printf %sเป็นอาร์กิวเมนต์แรกและสตริงที่ล้อมรอบด้วยเครื่องหมายคำพูดเดี่ยวเป็นอาร์กิวเมนต์ที่สอง:

printf %s '
Different characters can be represented and supported 
in the printf command, for example: 
x-y, X+Y, –, +, <, >, %, $, #, &.
'

โดยใช้ราคาเดียวแทนคำพูดคู่หยุดเปลือกจากสัญลักษณ์ interpolating $เช่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.