วิธีใช้คำสั่ง Echo บน Linux

echoคำสั่งเป็นที่สมบูรณ์แบบสำหรับการเขียนรูปแบบข้อความไปยังหน้าต่าง terminal และไม่จำเป็นต้องเป็นข้อความคงที่ สามารถรวมตัวแปรเชลล์ชื่อไฟล์และไดเร็กทอรี คุณยังสามารถเปลี่ยนเส้นทางเสียงสะท้อนเพื่อสร้างไฟล์ข้อความและไฟล์บันทึก ทำตามคำแนะนำง่ายๆนี้เพื่อดูวิธีการ

Echo ทำซ้ำสิ่งที่คุณบอกให้ทำซ้ำ

ซุสชอบที่จะออกจากภูเขาโอลิมปัสเพื่อคบหากับนางไม้แสนสวย ในการเดินทางครั้งหนึ่งเขาบอกนางไม้ภูเขาที่เรียกว่าเอคโค่เพื่อไล่ตามเฮร่าภรรยาของเขาหากเธอตามเขาไป เฮร่าตามหาซุสและเอคโค่ก็ทำทุกวิถีทางเพื่อให้เฮร่าคุยกัน ในที่สุดเฮร่าก็เสียอารมณ์และสาปแช่งก้องผู้น่าสงสารเพื่อให้เธอพูดซ้ำคำสุดท้ายที่คนอื่นพูด สิ่งที่ Hera ทำกับ Zeus เมื่อเธอติดต่อกับเขาคือใคร ๆ ก็เดาได้

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

แม้ว่าจะไม่ได้รับเสียงระฆังและนกหวีดมากมาย แต่ก็มีโอกาสที่ดีที่จะechoมีความสามารถบางอย่างที่คุณไม่รู้หรือคุณลืมไป

เสียงสะท้อน? ก้อง!

ระบบ Linux ส่วนใหญ่มีechoไฟล์. Bash shell มีอยู่ในตัวechoและมีเวอร์ชันปฏิบัติการไบนารีด้วยechoเช่นกัน

เราสามารถดูสองเวอร์ชันที่แตกต่างกันได้โดยใช้คำสั่งต่อไปนี้:

พิมพ์ echo
เสียงสะท้อนที่ไหน

typeคำสั่งบอกให้เราทราบว่าคำสั่งที่เราผ่านไปมันเป็นอาร์กิวเมนต์ที่เป็น builtin เปลือกปฏิบัติการไบนารีนามแฝงหรือมีฟังก์ชั่น รายงานให้เราทราบว่าechoเป็นเปลือกที่สร้างขึ้น

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

whereisคำสั่งรูปลักษณ์สำหรับไบนารีซอร์สโค้ดและหน้าคนสำหรับคำสั่งที่เราผ่านไปเป็นพารามิเตอร์บรรทัดคำสั่งของมัน ไม่มองหาเชลล์บิวด์อินเนื่องจากไม่มีไบนารีที่เรียกใช้งานแยกต่างหาก พวกมันเป็นส่วนหนึ่งของ Bash ที่เรียกใช้งานได้

whereisรายงานคำสั่งที่echoเป็นไบนารีอยู่ใน/binไดเรกทอรี

ในการใช้เวอร์ชันนั้นechoคุณจะต้องเรียกอย่างชัดเจนโดยระบุเส้นทางไปยังไฟล์ปฏิบัติการบนบรรทัดคำสั่ง:

/ bin / echo --version

เชลล์ในตัวไม่ทราบว่า--versionอาร์กิวเมนต์บรรทัดคำสั่งคืออะไรเพียงแค่ทำซ้ำในหน้าต่างเทอร์มินัล:

เสียงสะท้อน - รุ่น

ตัวอย่างที่แสดงที่นี่ทั้งหมดใช้เวอร์ชันเริ่มต้นของechoใน Bash shell

การเขียนข้อความไปยัง Terminal

ในการเขียนสตริงข้อความธรรมดาลงในหน้าต่างเทอร์มินัลให้พิมพ์echoและสตริงที่คุณต้องการให้แสดง:

echo ฉันชื่อเดฟ

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

echo ฉันชื่อเดฟและฉันเป็นคนเก่ง

หน้าต่างเทอร์มินัลแสดง   > ป้ายและนั่งรออยู่ Ctrl + C จะนำคุณกลับสู่พรอมต์คำสั่ง เกิดอะไรขึ้นที่นั่น?

อ้างเดียวหรือเครื่องหมายวรรคตอนในคำว่า“ฉัน” echoสับสน มันตีความว่าเครื่องหมายคำพูดเดียวเป็นจุดเริ่มต้นของส่วนที่ยกมาของข้อความ เนื่องจากตรวจไม่พบเครื่องหมายคำพูดเดียวที่ปิด  echoจึงกำลังรอข้อมูลเพิ่มเติม คาดว่าข้อมูลเพิ่มเติมเพื่อรวมเครื่องหมายคำพูดเดี่ยวที่ขาดหายไปซึ่งกำลังรออยู่

หากต้องการรวมเครื่องหมายคำพูดเดียวในสตริงวิธีแก้ปัญหาที่ง่ายที่สุดคือการรวมสตริงทั้งหมดไว้ในเครื่องหมายคำพูดคู่:

echo "ฉันชื่อเดฟและฉันเป็นคนเกินบรรยาย"

การห่อข้อความของคุณด้วยเครื่องหมายอัญประกาศเป็นคำแนะนำทั่วไปที่ดี ในสคริปต์มันหมดจด delimits echoพารามิเตอร์ที่คุณกำลังผ่านไป สิ่งนี้ทำให้การอ่านและการแก้ไขข้อบกพร่อง - สคริปต์ง่ายขึ้นมาก

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

echo "ฉันชื่อเดฟและฉันเป็น \" เกินบรรยาย \ ""

สิ่งนี้รวมคำว่า“ geek” ไว้ในเครื่องหมายอัญประกาศคู่สำหรับเรา เราจะเห็นอักขระที่ใช้เครื่องหมายทับขวาเหล่านี้เพิ่มเติมในไม่ช้า

การใช้ตัวแปรด้วยเสียงสะท้อน

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

my_name = "เดฟ"

my_nameมีการสร้างตัวแปรที่เรียกว่า ได้รับการกำหนดค่าของข้อความ "Dave" เราสามารถใช้ชื่อตัวแปรในสตริงที่เราส่งผ่านไปecho ได้และค่าของตัวแปรจะถูกเขียนลงในหน้าต่างเทอร์มินัล คุณต้องใส่เครื่องหมายดอลลาร์$หน้าชื่อตัวแปรเพื่อแจ้งให้echoทราบว่าเป็นตัวแปร

มีข้อแม้คือ หากคุณพันสตริงของคุณด้วยเครื่องหมายอัญประกาศเดี่ยวecho จะถือว่าทุกอย่างเป็นไปอย่างแท้จริง ในการแสดงค่าตัวแปรไม่ใช่ชื่อของตัวแปรให้ใช้เครื่องหมายอัญประกาศคู่

echo 'ฉันชื่อ $ my_name'
echo "ฉันชื่อ $ my_name"

ค่อนข้างเหมาะที่ควรทำซ้ำ:

  • ใช้เพียงครั้งเดียวเครื่องหมายคำพูดผลลัพธ์ในข้อความที่ถูกเขียนไปยังหน้าต่าง terminal ในตัวอักษรแฟชั่น
  • การใช้  เครื่องหมายอัญประกาศคู่ส่งผลให้ตัวแปรถูกตีความหรือเรียกอีกอย่างว่าการขยายตัวแปรและค่าจะถูกเขียนลงในหน้าต่างเทอร์มินัล

ที่เกี่ยวข้อง: วิธีการทำงานกับตัวแปรใน Bash

การใช้คำสั่งด้วยเสียงสะท้อน

เราสามารถใช้คำสั่งกับechoและรวมเอาท์พุทลงในสตริงที่เขียนลงในหน้าต่างเทอร์มินัล เราต้องใช้เครื่องหมายดอลลาร์$ราวกับว่าคำสั่งเป็นตัวแปรและรวมคำสั่งทั้งหมดไว้ในวงเล็บ

เราจะใช้คำสั่ง date echoเคล็ดลับหนึ่งคือการใช้คำสั่งในตัวเองก่อนที่จะเริ่มใช้กับ ด้วยวิธีนี้หากมีบางอย่างผิดปกติกับไวยากรณ์ของคำสั่งของคุณให้คุณระบุและแก้ไขก่อนที่จะรวมไว้ในechoคำสั่ง จากนั้นหากechoคำสั่งไม่เป็นไปตามที่คุณคาดหวังคุณจะรู้ว่าปัญหาต้องมาจากechoไวยากรณ์เพราะคุณได้พิสูจน์ไวยากรณ์ของคำสั่งแล้ว

ลองสิ่งนี้ในหน้าต่างเทอร์มินัล:

วันที่ +% D

และพอใจที่เราได้รับสิ่งที่คาดหวังจากคำสั่ง date เราจะรวมเข้ากับechoคำสั่ง:

echo "วันที่ของวันนี้คือ $ (วันที่ +% D)"

สังเกตว่าคำสั่งอยู่ในวงเล็บและเครื่องหมายดอลลาร์$ อยู่ข้างหน้าวงเล็บแรก

การจัดรูปแบบข้อความด้วยเสียงสะท้อน

-e(เปิดใช้งานหนีทับขวา) ตัวเลือกที่ช่วยให้เราใช้ตัวอักษรทับขวาหนีบางอย่างที่จะเปลี่ยนรูปแบบของข้อความ เหล่านี้คืออักขระที่ใช้เครื่องหมายแบ็กสแลชที่เราสามารถใช้ได้:

  • \ a : การแจ้งเตือน (ในอดีตเรียกว่า BEL) สิ่งนี้จะสร้างเสียงเตือนเริ่มต้น
  • \ b : เขียนอักขระ backspace
  • \ c : ละทิ้งผลลัพธ์เพิ่มเติมใด ๆ
  • \ e : เขียนอักขระหลีก
  • \ f : เขียนอักขระฟีดฟอร์ม
  • \ n : เขียนบรรทัดใหม่
  • \ r : เขียนการกลับรถ
  • \ t : เขียนแท็บแนวนอน
  • \ v : เขียนแท็บแนวตั้ง
  • \\ : เขียนอักขระแบ็กสแลช

ลองใช้บางส่วนและดูว่าพวกเขาทำอะไร

echo -e "นี่คือข้อความบรรทัดยาว \ n แบ่งเป็นสามบรรทัด \ n กับ \ ttabs \ ton \ tth \ tthird \ tline"

ข้อความถูกแบ่งออกเป็นบรรทัดใหม่ที่เราใช้\nอักขระและมีการแทรกแท็บที่เราใช้\tอักขระ

echo -e "ที่นี่ \ vare \ vvertical \ vtabs"

เช่นเดียวกับ\nอักขระขึ้นบรรทัดใหม่แท็บแนวตั้ง\vจะย้ายข้อความไปที่บรรทัดด้านล่าง แต่ไม่เหมือนกับ  \n อักขระขึ้นบรรทัดใหม่\vแท็บแนวตั้งจะไม่ขึ้นบรรทัดใหม่ที่คอลัมน์ศูนย์ ใช้คอลัมน์ปัจจุบัน

\bตัวอักษร Backspace ย้ายกลับเคอร์เซอร์ตัวละครตัวหนึ่ง หากมีการเขียนข้อความในเทอร์มินัลมากขึ้นข้อความนั้นจะเขียนทับอักขระก่อนหน้า

เสียงสะท้อน -e "123 \ b4"

“ 3” เขียนทับโดย“ 4”

\rตัวอักษรกลับรถทำให้เกิด  echoเพื่อกลับไปยังจุดเริ่มต้นของบรรทัดปัจจุบันและเขียนข้อความใด ๆ เพิ่มเติมจากศูนย์คอลัมน์

เสียงสะท้อน -e "123 \ r456"

อักขระ“ 123” ถูกเขียนทับด้วยอักขระ“ 456”

\aตัวอักษรการแจ้งเตือนจะผลิตเสียงดัง“bleep.” ใช้เสียงแจ้งเตือนเริ่มต้นสำหรับธีมปัจจุบันของคุณ

echo -e "ทำเสียงดัง \ a"

-n(ไม่มีการขึ้นบรรทัดใหม่) ตัวเลือกที่ไม่ได้เป็นลำดับทับขวาหนี แต่ก็ไม่ส่งผลกระทบต่อเครื่องสำอางของรูปแบบข้อความดังนั้นเราจะหารือเกี่ยวกับมันนี่ ป้องกันไม่ให้echoเพิ่มขึ้นบรรทัดใหม่ที่ท้ายข้อความ พรอมต์คำสั่งจะปรากฏขึ้นหลังข้อความที่เขียนลงในหน้าต่างเทอร์มินัลโดยตรง

echo -n "ไม่มีการขึ้นบรรทัดใหม่สุดท้าย"

ใช้เสียงสะท้อนกับไฟล์และไดเร็กทอรี

คุณสามารถใช้echoเป็นเวอร์ชันของls. ตัวเลือกของคุณมีน้อยและห่างไกลเมื่อคุณใช้echoแบบนี้ หากคุณต้องการความเที่ยงตรงหรือการควบคุมที่ดีคุณควรใช้lsและตัวเลือกมากมาย

คำสั่งนี้แสดงรายการไฟล์และไดเร็กทอรีทั้งหมดในไดเร็กทอรีปัจจุบัน:

เสียงสะท้อน *

คำสั่งนี้แสดงรายการไฟล์และไดเร็กทอรีทั้งหมดในไดเร็กทอรีปัจจุบันที่ชื่อขึ้นต้นด้วย“ D”:

เสียงสะท้อน D *

คำสั่งนี้แสดงรายการไฟล์“ .desktop” ทั้งหมดในไดเร็กทอรีปัจจุบัน:

เสียงสะท้อน * .desktop

ใช่. สิ่งนี้ไม่ได้เล่นเพื่อechoจุดแข็งของ ใช้ls.

การเขียนไฟล์ด้วยเสียงสะท้อน

เราสามารถเปลี่ยนเส้นทางเอาต์พุตจากechoและสร้างไฟล์ข้อความหรือเขียนลงในไฟล์ข้อความที่มีอยู่

หากเราใช้ตัว>ดำเนินการเปลี่ยนเส้นทางไฟล์จะถูกสร้างขึ้นหากไม่มีอยู่ หากมีไฟล์อยู่เอาต์พุตจากechoจะถูกเพิ่มที่จุดเริ่มต้นของไฟล์โดยเขียนทับเนื้อหาก่อนหน้านี้

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

echo "กำลังสร้างไฟล์ใหม่" > sample.txt
echo "กำลังเพิ่มไฟล์" >> sample.txt
cat sample.txt

ไฟล์ใหม่ถูกสร้างขึ้นโดยคำสั่งแรกและข้อความจะถูกแทรกลงในไฟล์ คำสั่งที่สองเพิ่มบรรทัดข้อความที่ด้านล่างของไฟล์ catคำสั่งแสดงเนื้อหาของไฟล์ที่จะหน้าต่าง terminal

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

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

echo "ไฟล์บันทึกเริ่มต้น: $ (วันที่ + '% D% T')"> logfile.txt
แมว logfile.txt

ไฟล์บันทึกของเราถูกสร้างขึ้นสำหรับเราและcatแสดงให้เราเห็นว่ามีการเพิ่มทั้ง datestamp และ timestamp เข้าไป

ที่เกี่ยวข้อง: stdin, stdout และ stderr บน Linux คืออะไร?

นั่นคือเสียงสะท้อนของ Repertoire

คำสั่งง่ายๆ แต่ขาดไม่ได้ ถ้ามันไม่มีเราก็ต้องคิดค้นมันขึ้นมา

เชนานิแกนส์ของซุสทำได้ดีมาก