นามแฝงกับฟังก์ชั่นในสคริปต์ทุบตี


11

ฉันต้องการทราบความแตกต่างระหว่างนามแฝงและฟังก์ชั่นในเชลล์ทุบตี - และเมื่อใดควรใช้อันไหน

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


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

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

ไซต์ข้ามที่เป็นไปได้ซ้ำซ้อนของ: unix.stackexchange.com/questions/30925/…
Ciro Santilli 冠状病毒审查审查六四事件法轮功

คำตอบ:


10

คิดว่าชื่อแทนเป็นชื่อเล่น คุณอาจมีคำสั่งที่คุณเล่นบ่อย แต่ต้องการให้สั้นลง

ตัวอย่างเช่นคุณมักต้องการไปที่เดสก์ท็อปใน commandline ดังนั้นคุณสามารถทำได้

alias desktop="cd ~/Desktop"

จากนั้นคุณก็พิมพ์

desktop

ใน terminal และมันจะทำงานcd ~/Desktopให้คุณ

ฟังก์ชั่นมีตรรกะ ในฟังก์ชั่นคุณอาจโทรไปยังหลาย ๆ โปรแกรม นี่คือฟังก์ชั่น echo อย่างง่าย

function e {
                echo $1 
                echo $1 $1
                echo $1 $1 $1                 
           }  

ในขณะที่มันอาจปรากฏคล้ายกับนามแฝงเมื่อคุณเรียกมัน

e Hello

e () ของคุณอาจมีสิ่งต่าง ๆ เกิดขึ้นมากมาย ด้านบนเป็นตัวอย่างง่าย ๆ

ควรสำรองนามแฝงสำหรับกรณีใช้งานง่าย ตัวอย่างส่วนตัว - ฉันเปลี่ยนrmคำสั่งของฉันเป็นแบบนี้

alias rm='trash-put'

เมื่อใดก็ตามที่ฉันทำ rm มันจะส่งไปที่ถังขยะแทนที่จะลบออกจากดิสก์ สิ่งนี้สำคัญกับความเงอะงะของฉันในเครื่องซึ่งฉันอาจ (บางครั้ง) ลบไฟล์สำคัญโดยไม่ตั้งใจ

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

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

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


2
ในความคิดของฉันมีหลายเหตุผลที่ใช้ฟังก์ชั่นแบบสแตนด์อโลน ในความเป็นจริงฉันมีฟังก์ชั่นจำนวนมากที่กำหนดไว้พร้อมกับชื่อแทนของฉัน ตัวอย่างเช่นฉันได้เปลี่ยน cd ด้วยฟังก์ชั่นที่มีชื่อเดียวกันเพื่อให้ฉันสามารถทำ ls โดยอัตโนมัติหลังจากซีดีแต่ละแผ่นโดยไม่ลดทอนการทำงานใด ๆ ไม่สามารถทำได้ด้วยนามแฝงเนื่องจากต้องใช้ตรรกะเล็กน้อย
Scott Severance

3

นามแฝงเป็นทางลัดง่าย ๆ ที่ใช้ในคอนโซลเพื่อหลีกเลี่ยงการพิมพ์คำสั่งยาวหรือทำซ้ำตัวเลือกเดียวกันเสมอ

ตัวอย่างคลาสสิกจะเป็น:

alias ll='ls -l'

นามแฝงใช้งานได้เฉพาะในคอนโซลการโต้ตอบเท่านั้นไม่ได้มีไว้สำหรับใช้ในสคริปต์

ฟังก์ชั่นสามารถใช้ในสคริปต์หรือในคอนโซล แต่มักจะใช้ในสคริปต์

ตรงกันข้ามกับนามแฝงที่เพิ่งถูกแทนที่ด้วยค่าของมันฟังก์ชันจะถูกตีความโดย bash shell

ฟังก์ชั่นมีประสิทธิภาพมากกว่านามแฝงพวกเขาสามารถใช้ในการสร้างโปรแกรมที่ซับซ้อนมาก

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