在 bash 脚本别名中使用函数参数

Using function parameters in a bash script alias

我有一个 bash 脚本,我想为其添加一个使用某些函数参数的别名。但是由于某种原因,当我使用传递的参数时该命令不起作用。

我的别名:

alias pa='_pa() { php artisan "" "" "" "" ""; }; _pa'

应该可以将 php artisan cache:clear 合并到 pa cache:clear

但是这给了我一个输入提示,而不是预期的命令:php artisan cache:clear

为什么我无法使用此功能创建别名?

你为什么要这么做?只需将别名更改为:

alias pa='php artisan'

或者干脆丢掉别名,只使用一个函数?

pa() {
  php artisan "$@"
}

使用 "$@" 将扩展到您发送给 pa

的参数数量

别名不带参数。如果您有别名 foo 并写

foo x y z

shell 只是将 foo 扩展为您定义的内容,例如

alias foo='bar baz'

,上面一行会变成

bar baz x y z

这就是为什么它在手册页中被称为 alias expansion 而不是 alias invocation

此外,您的别名 pa 毫无意义。除了 定义 一个名为 _pa 的函数然后 调用它之外,它什么都不做。因此,如果在你的 shell 之前没有定义这个名字的函数,做一个

pa 10 20 30 40 50

扩展为

_pa() { 
     php artisan "" "" "" "" ""
}
_pa 10 20 30 40 50

从而使函数 _pa spring 存在并调用该函数。因为我们有别名扩展,那些剩余的参数 (10, 20,...) 被附加到该行并最终作为函数 _pa.

的参数

基本上,每次重复使用您的别名 pa,您就会丢弃旧的 _pa 并重新创建它。不禁止这样做,但更简洁的解决方案是单独定义函数,如果出于任何原因想要此函数的第二个名称,请在之后定义别名:

_pa() { 
     php artisan "" "" "" "" ""
}
alias pa=_pa