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 中,何时使用别名、何时编写脚本以及何时编写函数?