如何在 Linux bash 中创建带有位置参数的别名?

mot*_*m79 5 linux bash command-line

假设我有一个带有几个选项的 bash 命令和我感兴趣的变量(例如文件名):

my_cmd option1 option2 filename
Run Code Online (Sandbox Code Playgroud)

我创建了一个别名:

alias my_cmd_12="my_cmd option1 option2"
Run Code Online (Sandbox Code Playgroud)

这允许我删除输入所有选项。但是,在我感兴趣的变量之后有一些标志(例如文件名):

my_cmd option1 option2 filename --flag1
Run Code Online (Sandbox Code Playgroud)

如何创建一个带有所有选项和标志的别名:

my_alias filename 相当于

my_cmd option1 option2 filename --flag1

Kam*_*ski 10

你不能用别名来做到这一点。Alias 的工作原理是用另一个字符串替换字符串。定义了这个别名

alias my_cmd_12="my_cmd option1 option2"
Run Code Online (Sandbox Code Playgroud)

my_cmd_12 filename --flag1 将扩展到

my_cmd option1 option2 filename --flag1
Run Code Online (Sandbox Code Playgroud)

但是您想调用my_alias filename以获得相同的结果。没有办法my_alias用另一个字符串替换,所以--flag1出现在末尾

但是一个函数应该可以工作:

my_function() { my_cmd option1 option2 "$1" --flag1; }
Run Code Online (Sandbox Code Playgroud)

请注意,这只是为您的示例量身定制的最小解决方案。通常,您可以"$@"根据需要使用更多位置参数或条件语句等。函数比别名更灵活。

更多信息:在 Bash 中,何时使用别名、何时编写脚本以及何时编写函数?