ไวยากรณ์นี้หมายความว่าอย่างไร


16

ฉันใหม่กับเทอร์มินัลและพยายามเรียนรู้วิธีใช้

เส้นเหล่านี้ทำอะไร และพวกเขาทำงานอย่างไร

echo -n "Today's date is: "
date +"%A, %B %-d, %Y"

7
$ man date && man echoที่เปลือก
code_dredd

คำตอบ:


76
$ type echo
echo is a shell builtin

ความหมายechoคำสั่งเป็นส่วนหนึ่งของbashโปรแกรม (สมมติว่าคุณใช้ bash)

-n เป็นตัวเลือกดังนั้นมาดูกันว่ามันทำอะไร

$ help echo
Write arguments to the standard output
...
-n  do not append a newline

ดังนั้นเมื่อเรารันเส้น:

zanna@monster:~$ echo -n "Today's date is: "
Today's date is: zanna@monster:~$ 

อืมนั้นดูไม่ดีนักเพราะไม่มีบรรทัดใหม่หลังจากพิมพ์ข้อความ เราจะกลับมาที่นี่

$ type date
date is /bin/date

อาดังนั้นdateคำสั่งเป็นโปรแกรมแยกต่างหาก มันทำอะไร?

$ man date
Display the current time in the given FORMAT, or set the system date.

อักขระหลังdateคำสั่งคือตัวเลือกรูปแบบ (ซึ่งต้องนำหน้าด้วย+) - ระบุส่วนต่าง ๆ ของวันที่ (ตัวอย่างเช่น%Aชื่อเต็มของวันในสัปดาห์ - ดูส่วนที่เหลือของman dateรายการตัวเลือกทั้งหมด)

$ date +"%A, %B %-d, %Y"
Tuesday, February 7, 2017

ดังนั้นหากเรารวบรวมคำสั่งไว้ในสคริปต์แล้วเรียกใช้สคริปต์เราจะได้รับ

Today's date is: Tuesday, February 7, 2017

ดี! หากคุณต้องการให้เอฟเฟกต์เหมือนกันในเทอร์มินัลคุณสามารถใช้เซมิโคลอนเพื่อแยกทั้งสองคำสั่งแทนการขึ้นบรรทัดใหม่:

$ echo -n "Today's date is: " ; date +"%A, %B %-d, %Y"
Today's date is: Tuesday, February 7, 2017

21
นี่เป็นคำตอบ RTFM ขั้นสูง +1
YSC

1
ฉันจะบอกว่านี่ไม่มีคำอธิบายสำหรับสิ่งที่เครื่องหมายบวกก่อนที่จะโต้แย้งคือ
Délisson Junio

@ DélissonJunioแก้ไขแล้ว แต่คำตอบของ Melebius แสดงให้เห็นว่าดีขึ้นด้วยการเสนอราคาหน้าคนโดยตรง
Zanna

@ ซานาฉันไม่ใช่ OP แต่สิ่งที่ดึงดูดสายตาของฉันก็คือความจริงที่ว่าเครื่องหมายบวกนั้นดูแปลก ๆ เพราะฉันคิดว่าการทุบตีจะตีความทุกอย่างระหว่างเครื่องหมายคำพูดเป็นอาร์กิวเมนต์เดียวไม่รวมถึงเครื่องหมายบวก แต่ฉันเดาว่านี่เป็นคำถามอื่น
Délisson Junio

2
คุณสามารถใส่เครื่องหมายบวกในเครื่องหมายคำพูดได้เช่นกัน Bash มีวิธีการทำงานร่วมกันที่อ้างถึงและข้อความที่อยู่ติดกันเช่น cd "$ x" / เอาท์พุทหรือแม้แต่ cd nospace / "with space" / nospace
StarWeaver

10

manคุณควรเริ่มต้นด้วยหน้าคู่มือคำสั่ง เพียงแค่พิมพ์ที่จะได้รับข้อมูลเกี่ยวกับman <command> <command>การควบคุมทิศทางในmanไม่ง่ายมาก แต่มีจำนวนมากของคำแนะนำกับมันเช่นhttps://wiki.gentoo.org/wiki/Man_page/Navigate#Navigating_and_searching_man_pages

ส่วนที่เกี่ยวข้องman echoและman date:

เสียงสะท้อน

echo [SHORT-OPTION]... [STRING]...

Echo the STRING(s) to standard output.

-n     do not output the trailing newline

ดังนั้นมันจะพิมพ์สตริงและไม่ไปที่บรรทัดใหม่หลังจากนั้น (ซึ่งเป็นพฤติกรรมเริ่มต้น) ดังนั้นผลลัพธ์ของคำสั่งต่อไปจะถูกพิมพ์ทางด้านขวาของสตริงสะท้อน

วันที่

date [OPTION]... [+FORMAT]

FORMAT controls the output.  Interpreted sequences are:

%A     locale's full weekday name (e.g., Sunday)

%B     locale's full month name (e.g., January)

%d     day of month (e.g., 01)

%Y     year

By default, date pads numeric fields with zeroes.  The following optional flags may follow '%':

-      (hyphen) do not pad the field

ฉันหวังว่ามันชัดเจน อย่าลังเลที่จะถามถ้าไม่


ขอบคุณมาก. ฉันมีคำถามอื่น: มีฟังก์ชั่นในตัวเพื่อแสดงวันที่ในเทอร์มินัลหรือไม่?
บุคคลที่ไม่รู้จัก

@ Zanna ไม่ใช่คำถามใหม่จริงๆมันเกี่ยวข้องกับคำถามที่ฉันถาม
บุคคลที่ไม่รู้จัก

1
@ ไม่ทราบชื่อหากคุณต้องการให้แสดงวันที่ในเทอร์มินัลโดยปริยายนั่นเป็นคำถามที่แตกต่างไปจากเดิมอย่างสิ้นเชิง "รหัสนี้ทำอะไร" เพราะคุณจะต้องแก้ไขตัวแปร PS1 (หรืออาจจะทำได้ด้วยแอปเทอร์มินัล ตั้งค่า - เกี่ยวกับที่ฉันไม่รู้) ซึ่งอยู่นอกขอบเขตของโพสต์นี้
Zanna

1
@Unknownperson date ไม่แสดงวันที่ในเทอร์มินัล (อินเตอร์เฟสบรรทัดคำสั่ง) หากคุณต้องการอะไรมากกว่านี้ (เหมือนที่ Zanna แนะนำ) โปรดถามคำถามใหม่
Melebius

4
echo -n "Today's date is: "

มันจะพิมพ์: วันที่วันนี้คือ:

date +"%A, %B %-d, %Y"

มันจะพิมพ์บางอย่างเช่นนี้: วันอังคารที่ 7 กุมภาพันธ์ 2017

คำแนะนำ :

  1. ใช้manหรือ--helpคำสั่งเพื่อทราบข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งอื่น ๆ
    เช่น :

    man echo
    echo --help
  2. ลองความท้าทายเหล่านี้ความท้าทายที่ดีจริงๆที่จะช่วยให้คุณเรียนรู้ที่จะทำสิ่งต่าง ๆ บนสถานี

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