alias vs. funkcja w skryptach bash

11

Chcę poznać różnicę między aliasami i funkcjami w powłoce bash - i kiedy użyć której.

Wydaje się oczywiste, że ponieważ funkcje mogą przyjmować argumenty, są one o wiele potężniejsze - ponieważ pracuję głównie na drodze z netbookiem i chcę oszczędzać energię i moc obliczeniową, szczególnie chciałbym dowiedzieć się nieco więcej o różnicach w wydajności z tych dwóch sposobów rozszerzenia funkcjonalności bash są.

MaxAxeHax
źródło
1
Nie musisz być poniżający. Jeśli twoje pytanie nie jest pożądane, zostanie odrzucone. A jeśli ktoś chce, abyś wyjaśnił twoje pytanie, powie to w komentarzu. A zabranianie ludziom edytowania twojego postu jest jakby nie rozumiem. Ta strona jest zaprojektowana tak, aby wszystko było edytowalne dla wszystkich.
k0pernikus
Nie próbowałem zabronić, ale uprzejmie poprosiłem o szansę wyjaśnienia, czy uznają to za konieczne. Miałem doświadczenie w zadawaniu bardzo prostych pytań na tematy, o których niewiele wiem, a potem ludzie myśleli, że to zupełnie oczywiste, że pytam o coś bardziej złożonego i poprawcie mnie o tym, że nie wiem, jak zapytać o to, czego chcę . Oczywiście jedną z wielkich zalet tej platformy jest to, że jest edytowalna przez innych użytkowników, nie próbowałem tego podważać. Dzięki za opinie,
zmusiłem
Możliwy duplikat witryny: unix.stackexchange.com/questions/30925/...
Ciro Santilli 16 病毒 审查 六四 事件 法轮功

Odpowiedzi:

10

Myśl o aliasach jako pseudonimach. Możesz mieć polecenie, które często wykonujesz, ale chcesz je skrócić.

Na przykład często chcesz przejść bezpośrednio do pulpitu w wierszu polecenia, aby to zrobić

alias desktop="cd ~/Desktop"

Od tego momentu po prostu pisz

desktop

w terminalu i wykona cd ~/Desktopdla ciebie.

Funkcje zawierają logikę. W funkcji możesz wykonywać połączenia z kilkoma różnymi programami. Oto prosta funkcja echa

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

Chociaż może się wydawać podobny do aliasu, gdy go nazwiesz

e Hello

Twoja e () może mieć wiele różnych rzeczy. Powyżej jest uproszczonym przykładem.

Aliasy powinny być zastrzeżone dla prostych przypadków użycia. Przykład osobisty - moje rmpolecenie zastąpiłem w ten sposób

alias rm='trash-put'

Ilekroć zrobię RM, wyśle ​​go do kosza zamiast usuwać z dysku. To służy mojej niezdarności w terminalu, w którym mogę (czasami) przypadkowo usunąć ważny plik.

Funkcje , o których musisz pamiętać, to logika. Zwykle nie używasz funkcji samodzielnej. Byłby to część większego skryptu. Wyobraź sobie skrypt, który przenosi wszystkie twoje pliki i zmienia ich nazwy na ich świniowate wersje łacińskie. Zignoruj ​​to na różne sposoby.

Ale możesz zrobić pętlę przez każdy plik w katalogu i przekazać ścieżkę do funkcji RenameAsPigLatin. Funkcja RenameAsPigLatin może mieć dodatkową logikę obejmującą liczby, w których zdecydujesz, że nazwy plików kończących się liczbami nie powinny być zmieniane.

Natychmiast widać korzyści wynikające z posiadania go jako funkcji. Funkcja może skupić się na zmianie nazwy według twoich dziwnych reguł, podczas gdy reszta skryptu może przechodzić między różnymi katalogami w razie potrzeby.

Mendhak
źródło
2
Moim zdaniem istnieje wiele powodów, aby używać funkcji autonomicznych. W rzeczywistości mam wiele funkcji zdefiniowanych wraz z moimi aliasami. Na przykład zastąpiłem płytę cd funkcją o tej samej nazwie, dzięki czemu mogę automatycznie wykonać ls po każdym dysku CD bez poświęcania jakiejkolwiek funkcjonalności. Nie można tego zrobić za pomocą aliasu, ponieważ wymaga trochę logiki.
Scott Severance,
3

Alias ​​to prosty skrót używany w konsoli, aby uniknąć wpisywania długich poleceń lub zawsze powtarzania tych samych opcji.

Klasycznym przykładem byłoby:

alias ll='ls -l'

Aliasy działają tylko w interaktywnej konsoli, nie są przeznaczone do użycia w skryptach.

Funkcji można używać w skryptach lub w konsoli, ale częściej są one używane w skryptach.

W przeciwieństwie do aliasów, które są po prostu zastąpione ich wartością, funkcja zostanie zinterpretowana przez powłokę bash.

Funkcje są znacznie potężniejsze niż aliasy, można ich używać do budowania bardzo złożonych programów.

wjandrea
źródło