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

Yos*_*Yos 5 bash alias

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

function e() { echo "$*"; }
Run Code Online (Sandbox Code Playgroud)

我还应该创建一个别名:

alias e='e'
Run Code Online (Sandbox Code Playgroud)

你认为它有道理吗?如果是,理由是什么?我想我可以获取函数并使用它们而无需别名,所以这看起来有点像不必要的工作。

Ser*_*nyy 7

别名的情况

  • 当您想通过短名称引用冗长的命令时,别名非常有用。
  • 按照优先顺序,别名高于函数,因此如果您想覆盖自己会话的某些现有名称,您可以使用别名。

功能案例

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

    $ ls
    serg says this command is a no-no
    $ \ls
    serg says this command is a no-no
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,用户仍然可以/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. 引用和引用变量不再是一个问题。


mur*_*uru 7

function e() { echo "$*"; }
Run Code Online (Sandbox Code Playgroud)

我还应该创建一个别名:

alias e='e'
Run Code Online (Sandbox Code Playgroud)

照原样,这很愚蠢。定义一个函数的别名并赋予它相同的名称是没有意义的。

我认为他们的意思是:

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