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

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

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

10
задан 18 March 2014 в 04:53

3 ответа

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

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

alias ll='ls -l'

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

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

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

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

0
ответ дан 18 March 2014 в 04:53

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

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

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

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

0
ответ дан 18 March 2014 в 04:53

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

-1
ответ дан 23 June 2020 в 19:12

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

Похожие вопросы: