我上过一门关于 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'
就其本身而言,这非常愚蠢。定义函数的别名并赋予其相同的名称毫无意义。
我认为他们的意思是:
- 为您编写的每个函数提供一个描述性的名称,该名称可以很长。
- 并为方便起见,创建一个简短的别名。