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

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

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

2 ответа

Решение

Думайте об псевдонимах как псевдонимах. У вас может быть команда, которую вы много выполняете, но хотите сократить.

Например, вы часто хотите перейти прямо на рабочий стол в командной строке, так что вы можете сделать это

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

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

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

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

alias ll='ls -l'

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

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

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

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

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

Другие вопросы по тегам