이것은 약 8년 동안 저에게 효과적이었습니다.
$ alias al='alias | grep $1'
예:
$ al git
clean='git clean -xfde'
echo_git_root='echo "$(git rev-parse --show-toplevel || echo .)"'
# etc.
like를 호출하면 al git
내 모든 git 별칭이 표시됩니다.
그러나 지금은 다음을 얻습니다.
$ al git
grep: git: No such file or directory
별칭이 대체되지 않은 것 같습니다.
$ alias al
al='alias | grep $1'
물론 (별명을 우회하여) naked 명령을 실행하면 정상적으로 작동합니다.
$ alias | grep git
clean='git clean -xfde'
echo_git_root='echo "$(git rev-parse --show-toplevel || echo .)"'
# etc.
나는 시도했다:
al='alias | /usr/bin/grep $1'
al='alias | \grep $1'
al='alias | grep ''$1'''
al='alias | grep \\'$1\\''
이 시점에서 나는 아이디어가 없습니다!
최근에 MacOS Monterey에서 Ventura로 업그레이드했습니다. 이전 ZSH 버전이 무엇인지는 잘 모르겠지만 현재는 5.9입니다. 이것이 관련이 있는지 확실하지 않지만 이것이 내 시스템에 대한 유일한 최근 변경 사항입니다.
답변1
별칭은 매개변수를 사용하지 않으며 단지 텍스트를 다른 텍스트로 대체합니다. 그것들은 매우 열악한 형태의 프로그래밍 구조입니다. 기능이없는 csh에서 왔습니다.
alias al='alias | grep $1'
명령 위치에서 토큰이 발견될 때마다 al
토큰이 대체될 것이라고 말하면 다음과 같습니다.alias | grep $1
al git
다음으로 대체됩니다:
alias | grep $1 git
그러면 이는 쉘 코드로 해석됩니다.
비어 있거나 설정되지 않은 경우 $1
다음과 같습니다.
alias | grep git
그러나 set foo bar
or 1=foo
or 이후에 실행하면 argv[1]=foo
다음과 같습니다.
alias | grep foo git
표준 입력을 무시하고 파일에서 찾습니다 grep
.foo
git
여기 Bourne 스타일이 필요합니다.
al() alias | grep "$@"
또는 csh 스타일²:
alias al='alias | grep'
1 csh
별칭 소스에서 내역 확장과 관련된 몇 가지 트릭을 사용하여 별칭이 인수를 수용할 수 있는 것처럼 보이게 할 수 있지만 이러한 트릭은 Korn과 같은 셸에서는 작동하지 않습니다.
² 음 csh
, 태그에 별칭을 추가하세요 . POSIX는 인터페이스를 지정 하고 복제하지만 에서는 제한 사항을 해결할 수도 있습니다 ( .alias al 'alias | grep'
alias token replacement
alias token=replacement
=
sh
zsh
zsh
aliases['=']=uname
'='
uname