Bash 脚本中的别名与函数

Bash 脚本中的别名与函数

我想知道 bash shell 中别名和函数之间的区别 - 以及何时使用哪一个。

显然,由于函数可以接受参数,因此它们的功能更加强大 - 因为我主要在路上使用上网本工作,并且想节省能源和处理能力,所以我特别想进一步了解这两种扩展 bash 功能的方式的性能差异。

答案1

考虑到别名作为昵称。您可能有一个经常执行的命令,但想将其缩短。

举个例子,你经常想在命令行中直接进入桌面,因此你可以这样做

alias desktop="cd ~/Desktop"

从那时起你只需输入

desktop

在终端中它将cd ~/Desktop为您执行。

功能包含逻辑。在一个函数中,你可能会调用几个不同的程序。这是一个简单的 echo 函数

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

虽然当你调用它时它可能看起来类似于别名

e Hello

您的 e() 可以产生很多不同的事情。以上是一个简单的例子。

别名应该保留用于简单的用例。个人示例 - 我已经rm像这样替换了我的命令

alias rm='trash-put'

每当我执行 rm 时,它都会将其发送到垃圾箱而不是从磁盘中删除。这迎合了我在终端上的笨拙,我可能(有时)不小心删除了重要文件。

功能,你需要记住,是逻辑的一部分。通常,你不会单独使用函数。它将是更大脚本的一部分。想象一下一个脚本,它将获取你所有的文件并将它们重命名为 pig latin 版本。忽略有多种不同的方法可以做到这一点。

但是您可以循环遍历目录中的每个文件并将文件路径传递给 RenameAsPigLatin 函数。RenameAsPigLatin 函数可能包含涉及数字的额外逻辑,您可以决定不应重命名以数字结尾的文件。

您可以立即看到将其作为函数的好处。该函数可以专注于按照您的奇怪规则进行重命名,而脚本的其余部分可以根据需要遍历各个目录。

答案2

别名是控制台中使用的简单快捷方式,以避免输入长命令或始终重复相同的选项。

一个典型的例子是:

alias ll='ls -l'

默认情况下,别名仅适用于交互式控制台。它们不适用于脚本,但如果您需要这样做,您可以将其添加shopt -s expand_aliases到脚本中以启用别名扩展。

函数可以在脚本中或控制台中使用,但在脚本中更常用。

与别名(仅被其值替换)相反,函数将由 bash shell 解释。

函数比别名强大得多。它们可用于构建非常复杂的程序。

答案3

除了已经说过的内容之外,函数的管道效果也比别名更好,因为使用别名会将您锁定在别名定义的内容中(除非引用)。我有几个独立的别名,我在特定于任务的管道命令中调用它们,如果它们是别名,调用起来会困难得多。此外,函数允许您为手头的任务全局或本地设置变量。

相关内容