我想知道 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 函数中可能有涉及数字的额外逻辑,您决定不应重命名以数字结尾的文件。
您可以立即看到将其作为函数的好处。该函数可以根据您的奇怪规则专注于重命名,而脚本的其余部分可以根据需要遍历各种目录。
小智 5
别名是在控制台中使用的简单快捷方式,以避免键入长命令或总是重复相同的选项。
一个经典的例子是:
alias ll='ls -l'
Run Code Online (Sandbox Code Playgroud)
默认情况下,别名仅适用于交互式控制台。它们并不打算在脚本中使用,但如果您需要这样做,您可以添加shopt -s expand_aliases到脚本中以启用别名扩展。
函数可以在脚本或控制台中使用,但更常用于脚本中。
与别名相反,别名只是由它们的值替换,函数将由 bash shell 解释。
函数比别名强大得多。它们可用于构建非常复杂的程序。