псевдонім vs. функція у скриптах bash


11

Я хочу знати різницю між псевдонімами та функціями в оболонці bash - і коли використовувати який.

Здається очевидним, що оскільки функції можуть брати аргументи, вони набагато потужніші - оскільки я працюю в основному в дорозі з нетбуком і хочу заощадити енергію та потужність обробки, я б особливо хотів би дізнатися більше про те, які відмінності в продуктивності з цих двох способів розширити функціональність bash.


1
Не потрібно бути самозакоханим. Якщо ваше запитання не захочене, воно буде скасовано. І якщо хтось хоче, щоб ви уточнили своє запитання, він це скаже в коментарі. І заборона людям редагувати вашу публікацію - це начебто не вистачає сенсу. Цей веб-сайт призначений для редагування для всіх.
k0pernikus

Я не намагався заборонити, а просто люб'язно попросив дати мені можливість уточнити, чи вважають вони це необхідним. У мене був досвід задавати дуже прості запитання про теми, про які я мало знаю, і тоді люди подумали, що це абсолютно очевидно, я запитую про щось складніше і мене виправляють, як я не знаю, як запитати те, що я хочу . Звичайно, однією з найважливіших переваг цієї платформи є те, що її редагують однолітки, я не намагався це підірвати. Дякую за Ваш відгук, змусив мене задуматися :)
MaxAxeHax

Відповіді:


10

Подумайте про псевдоніми як прізвиська. Можливо, у вас є команда, яку ви багато виконуєте, але хочете скоротити.

Як приклад, вам часто хочеться перейти прямо на робочий стіл в командному рядку, так що ви можете це зробити

alias desktop="cd ~/Desktop"

Відтепер ви просто набираєте текст

desktop

в терміналі, і він виконає cd ~/Desktopдля вас.

Функції містять логіку. У функції ви можете телефонувати в декілька різних програм. Ось проста функція відлуння

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

Хоча він може виглядати схожим на псевдонім, коли ви його називаєте

e Hello

У вашому e () може статися багато різних речей. Наведене є спрощеним прикладом.

Псевдоніми мають бути зарезервовані для простих випадків використання. Особистий приклад - я замінив свою rmкоманду так

alias rm='trash-put'

Щоразу, коли я роблю rm, він надсилатиме його у кошик, а не видаляє його з диска. Це заважає моїй незграбності в терміналі, де я (іноді) випадково можу видалити важливий файл.

Функції , які вам потрібно запам’ятати, - це фрагменти логіки. Зазвичай ви не використовуєте функцію окремо. Це було б частиною більшого сценарію. Уявіть собі сценарій, який бере всі ваші файли та перейменовує їх у версії латинської свині. Ігноруйте, що існують різні способи зробити це.

Але те, що ти можеш зробити, - переглядати кожен файл у каталозі та передавати файловий шлях до функції RenameAsPigLatin. Функція RenameAsPigLatin може мати додаткову логіку, що стосується чисел, і ви вирішите, що файли, що закінчуються на числа, не повинні перейменовуватися.

Відразу ви можете побачити користь від того, щоб це було як функція. Функція може зосередитись на перейменуванні за вашими дивними правилами, тоді як решта сценарію може переходити до різних каталогів, якщо це необхідно.


2
На мою думку, існує багато причин використовувати функції самостійно. Насправді у мене є ряд функцій, визначених разом із псевдонімами. Наприклад, я замінив компакт-диск на однойменну функцію, щоб я міг автоматично робити ls після кожного компакт-диска, не приносячи шкоди будь-якій функціональності. Це не можна зробити з псевдонімом, оскільки він вимагає трохи логіки.
Скотт Северанс

3

Псевдонім - це простий ярлик, який використовується в консолі, щоб уникнути введення довгих команд або завжди повторення одних і тих же параметрів.

Класичним прикладом може бути:

alias ll='ls -l'

Псевдоніми працюють лише в інтерактивній консолі, вони не призначені для використання в сценаріях.

Функція може використовуватися в сценаріях або в консолі, але частіше використовується в сценаріях.

На відміну від псевдонімів, які просто замінені своїм значенням, функція буде інтерпретована оболонкою bash.

Функції набагато потужніші, ніж псевдоніми, їх можна використовувати для побудови дуже складних програм.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.