alias vs. fungsi dalam skrip bash

11

Saya ingin tahu perbedaan antara alias dan fungsi di bash shell - dan kapan harus menggunakan yang mana.

Tampak jelas bahwa karena fungsi dapat mengambil argumen, mereka jauh lebih kuat - karena saya bekerja terutama di jalan dengan netbook dan ingin menghemat energi dan kekuatan pemrosesan, saya terutama ingin tahu lebih banyak tentang perbedaan kinerja dari dua cara ini untuk memperluas fungsi bash adalah.

MaxAxeHax
sumber
1
Tidak perlu merendahkan diri. Jika pertanyaan Anda tidak diinginkan, pertanyaan akan dibatalkan. Dan jika seseorang ingin Anda mengklarifikasi pertanyaan Anda, ia akan mengatakannya dalam komentar. Dan melarang orang untuk mengedit posting Anda agak kehilangan intinya. Situs ini dirancang untuk semuanya dapat diedit untuk semua orang.
k0pernikus
Saya tidak mencoba untuk melarang, tetapi dengan ramah meminta untuk memberi saya kesempatan untuk mengklarifikasi jika mereka menganggapnya perlu. Saya memiliki pengalaman mengajukan pertanyaan yang sangat sederhana tentang topik yang saya tahu sedikit tentang, dan kemudian orang berpikir itu benar-benar jelas saya bertanya tentang sesuatu yang lebih kompleks dan mengoreksi saya tentang bagaimana saya tidak tahu bagaimana menanyakan apa yang saya inginkan . Tentu saja salah satu kelebihan hebat dari platform ini adalah fakta bahwa itu dapat diedit oleh rekan-rekan, saya tidak berusaha merusaknya. Terima kasih atas tanggapan Anda, membuat saya berpikir :)
MaxAxeHax
Kemungkinan situs lintas duplikat dari: unix.stackexchange.com/questions/30925/...
Ciro Santilli冠状病毒审查六四事件法轮功

Jawaban:

10

Pikirkan alias sebagai nama panggilan. Anda mungkin memiliki perintah yang banyak Anda lakukan tetapi ingin dipersingkat.

Sebagai contoh, Anda sering ingin langsung masuk ke desktop di commandline, jadi Anda bisa melakukan ini

alias desktop="cd ~/Desktop"

Mulai saat itu Anda cukup mengetik

desktop

di terminal dan itu akan melakukan cd ~/Desktopuntuk Anda.

Fungsinya mengandung logika. Dalam suatu fungsi, Anda dapat membuat panggilan ke beberapa program berbeda. Inilah fungsi gema sederhana

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

Meskipun mungkin tampak mirip dengan alias saat Anda memanggilnya

e Hello

E () Anda dapat memiliki banyak hal berbeda terjadi. Di atas adalah contoh sederhana.

Alias harus disediakan untuk kasus penggunaan sederhana. Contoh pribadi - Saya telah mengganti rmperintah saya seperti ini

alias rm='trash-put'

Setiap kali saya melakukan rm, ia akan mengirimnya ke tempat sampah alih-alih menghapusnya dari disk. Ini memenuhi kecanggungan saya di terminal di mana saya mungkin (kadang-kadang) secara tidak sengaja menghapus file penting.

Fungsi , yang perlu Anda ingat, adalah bagian dari logika. Anda tidak akan menggunakan fungsi yang berdiri sendiri, biasanya. Itu akan menjadi bagian dari skrip yang lebih besar. Bayangkan sebuah skrip yang mengambil semua file Anda dan mengganti namanya menjadi versi latin babi mereka. Abaikan bahwa ada berbagai cara untuk melakukannya.

Tapi yang bisa Anda lakukan adalah mengulangi setiap file dalam direktori dan meneruskan filepath ke fungsi RenameAsPigLatin Anda. Fungsi RenameAsPigLatin mungkin memiliki logika tambahan di sana yang melibatkan angka, di mana Anda memutuskan bahwa file yang diakhiri dengan angka tidak boleh diganti namanya.

Segera Anda dapat melihat manfaat memilikinya sebagai suatu fungsi. Fungsi ini dapat fokus pada penggantian nama dengan aturan aneh Anda sementara skrip lainnya dapat melintasi berbagai direktori yang diperlukan.

Mendhak
sumber
2
Menurut pendapat saya, ada banyak alasan untuk menggunakan fungsi mandiri. Bahkan, saya memiliki sejumlah fungsi yang didefinisikan bersama dengan alias saya. Sebagai contoh, saya telah mengganti cd dengan fungsi dengan nama yang sama sehingga saya dapat membuatnya secara otomatis melakukan ls setelah setiap cd tanpa mengorbankan fungsi apa pun. Ini tidak dapat dilakukan dengan alias karena memerlukan sedikit logika.
Scott Severance
3

Alias ​​adalah pintasan sederhana yang digunakan di konsol untuk menghindari mengetik perintah panjang atau selalu mengulangi opsi yang sama.

Contoh klasik adalah:

alias ll='ls -l'

Alias ​​hanya berfungsi di konsol interaktif, mereka tidak dimaksudkan untuk digunakan dalam skrip.

Fungsi dapat digunakan dalam skrip atau di konsol, tetapi lebih sering digunakan dalam skrip.

Berlawanan dengan alias, yang baru saja digantikan oleh nilainya, suatu fungsi akan ditafsirkan oleh bash shell.

Fungsi jauh lebih kuat daripada alias, mereka dapat digunakan untuk membangun program yang sangat kompleks.

wjandrea
sumber