我需要在 zsh 中设置一个函数,该函数将根据命令行上的某些输入编辑不同的文件。
我想简化我的别名,这样我就不需要多个别名来做同样的事情,但略有不同。我特别尝试设置一个函数来在编辑器中打开不同版本的 php.ini 文件(适用于 php 5.4、5.5、5.6 和 7.0)
现在,我定义了以下别名:
alias editphpini54="subl /usr/local/etc/php/5.4/php.ini"
alias editphpini55="subl /usr/local/etc/php/5.5/php.ini"
alias editphpini56="subl /usr/local/etc/php/5.6/php.ini"
alias editphpini70="subl /usr/local/etc/php/7.0/php.ini"
我想做的是设置一个名为 的函数editphpini
,然后输入一个变量(版本号)并让它智能地打开正确的文件。只要基本路径保持不变,这也可以是面向未来的。
所以,我想做的是能够输入
editphpini 54
并让函数解析该命令并加载php.ini
位于的文件/usr/local/etc/php/5.4/php.ini
使用上面的示例,我就可以在命令末尾替换55
56
或,从而发出相关命令。70
在我看来,该函数将获取版本号,使用 来XX
将其插入命令中来定义版本号。subl /usr/local/etc/php/X.X/php.ini
XX
老实说,我已经尝试了多种方法,但似乎没有任何效果,因此,如果有人能指出我正确的方向,我将不胜感激,而不是仅仅列出我所有失败的尝试。
谢谢你,
阿里
答案1
editphpini() subl /usr/local/etc/php/${1[1]}.${1[2,-1]}/php.ini
${1[1]}.${1[2,-1]}
xyz
是转变为的众多方法之一x.yz
。其他方法可以是:${1[1]}.${1#?}
、 或${1/(#m)?/$MATCH.}
或${(j:.:)${(s::)1}}
(对于x.y.z
)
答案2
function editphpini() {
local version=$( echo $1 | sed 's/^\(.\)/\1./' )
subl /usr/local/etc/php/${version}/php.ini
}
用法:
% editphpini 54