명령줄의 특정 입력을 기반으로 다른 파일을 편집하는 기능을 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