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

11

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

Кажется очевидным, что, поскольку функции могут принимать аргументы, они намного мощнее - поскольку я работаю в основном с нетбуком в дороге и хочу экономить энергию и вычислительную мощность, мне особенно хотелось бы узнать немного больше о том, что отличает производительность из этого два способа расширить функциональность bash:

MaxAxeHax
источник
1
Не нужно быть унизительным. Если ваш вопрос не хотел, он будет отклонен. И если кто-то захочет уточнить ваш вопрос, он скажет об этом в комментарии. И запрещение людям редактировать ваш пост - упущение. Этот сайт создан для того, чтобы все было доступно для редактирования всем.
k0pernikus
Я не пытался запретить, но просто прошу дать мне возможность уточнить, считают ли они это необходимым. У меня был опыт задавать очень простые вопросы по темам, о которых я мало знаю, а затем люди думали, что это совершенно очевидно, я спрашиваю о чем-то более сложном и поправляю меня о том, как я не знаю, как просить то, что я хочу , Конечно, одним из больших преимуществ этой платформы является тот факт, что ее могут редактировать коллеги, я не пытался ее подорвать. Спасибо за ваш отзыв, заставил меня задуматься :)
MaxAxeHax
Возможный кросс-сайт дубликатов: unix.stackexchange.com/questions/30925/…
Сиро Сантилли 冠状 病毒 审查 六四 事件 法轮功

Ответы:

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 может иметь дополнительную логику, включающую числа, где вы решаете, что файлы, заканчивающиеся числами, не должны быть переименованы.

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

Mendhak
источник
2
На мой взгляд, есть много причин использовать функции автономно. На самом деле, у меня есть ряд функций, определенных вместе с моими псевдонимами. Например, я заменил компакт-диск на функцию с тем же именем, чтобы я мог автоматически делать ls после каждого компакт-диска, не жертвуя при этом какой-либо функциональностью. Это не может быть сделано с псевдонимом, потому что это требует немного логики.
Скотт Северанс
3

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

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

alias ll='ls -l'

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

Функция может использоваться в скриптах или в консоли, но чаще используется в скриптах.

В отличие от псевдонимов, которые просто заменяются на их значение, функция будет интерпретироваться оболочкой bash.

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

wjandrea
источник