在 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
我有一个 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