我应该为每个 Bash 函数创建一个别名吗?

我应该为每个 Bash 函数创建一个别名吗?

我上过一门关于 bash 和终端的短期课程,课程中列出的最佳实践之一是为每个要创建的函数创建一个别名。例如,如果我有一个函数:

function e() { echo "$*"; }

我还应该创建一个别名:

alias e='e'

您认为这有意义吗?如果有意义,其原因是什么?我认为我可以获取函数并使用它们而无需使用别名,因此这似乎有点不必要的工作。

答案1

别名的大小写

  • 当您想用简短的名称引用较长的命令时,别名会非常有用。
  • 在优先顺序中,别名的地位高于函数,因此如果你想覆盖某些现有名称为您自己的会议您可以使用别名。

函数实例

  • 当你有一个命令需要同时处理单引号和双引号,使用函数。那些处理sed或多处理的人awk都明白。
  • 当你想要引用一个由多个与变量交互的命令组成的冗长任务时,请使用函数。一般来说,我个人遵循的规则是,如果有超过 3 个命令,就该使用函数了。
  • 可以通过附加 来转义别名\。这对系统管理员很有用。如果您不希望用户运行某些命令,则函数将优先于 。示例:

    $ ls
    serg says this command is a no-no
    $ \ls
    serg says this command is a no-no
    

    请注意,用户仍然可以/bin/ls在那里毫无问题地运行,所以这实际上不是一个很好的安全措施。我认为更好的用途是作为某些命令的包装器,您想在其中添加标题或删除一些信息。

  • 来自 bash 手册页:There is no mechanism for using arguments in the replacement text.If arguments are needed, a shell function should be used。因此,虽然您可以做一些简单的技巧 - 类似于alias e="echo"; e Hello- 但当您想要广泛处理命令行参数时,您会需要一个函数。

就我个人经验而言,我发现自己使用函数的次数远多于别名。它们就像脚本,只不过不需要创建外部文件 - 它们都可以存在于我的 中~/.bashrc。引用和引用变量不再是问题。

答案2

function e() { echo "$*"; }

我还应该创建一个别名:

alias e='e'

就其本身而言,这非常愚蠢。定义函数的别名并赋予其相同的名称毫无意义。

我认为他们的意思是:

  • 为您编写的每个函数提供一个描述性的名称,该名称可以很长。
  • 并为方便起见,创建一个简短的别名。

相关内容