bash 脚本中的别名与函数

Max*_*Hax 15 bash

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

很明显,因为函数可以带参数,所以它们的功能要强大得多——因为我主要是带着上网本在路上工作,想节省能源和处理能力,我特别想多了解一点性能差异这两种扩展bash功能的方法是。

Men*_*hak 15

别名视为昵称。您可能有一个执行很多但想要缩短的命令。

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

alias desktop="cd ~/Desktop"
Run Code Online (Sandbox Code Playgroud)

从那时起你只需输入

desktop
Run Code Online (Sandbox Code Playgroud)

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

函数包含逻辑。在一个函数中,您可能会调用多个不同的程序。这是一个简单的回声功能

function e {
                echo $1 
                echo $1 $1
                echo $1 $1 $1                 
           }  
Run Code Online (Sandbox Code Playgroud)

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

e Hello
Run Code Online (Sandbox Code Playgroud)

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

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

alias rm='trash-put'
Run Code Online (Sandbox Code Playgroud)

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

您需要记住,函数是逻辑片段。通常,您不会独立使用函数。它将成为更大脚本的一部分。想象一个脚本,它获取您的所有文件并将它们重命名为它们的猪拉丁版本。忽略有不同的方法来做到这一点。

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

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

  • 在我看来,独立使用函数有很多原因。事实上,我定义了许多函数以及我的别名。例如,我用一个同名的函数替换了 cd,这样我就可以让它在每个 cd 之后自动执行 ls 而不牺牲任何功能。这不能用别名来完成,因为它需要一些逻辑。 (2认同)

小智 5

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

一个经典的例子是:

alias ll='ls -l'
Run Code Online (Sandbox Code Playgroud)

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

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

与别名相反,别名只是由它们的值替换,函数将由 bash shell 解释。

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