주변을 검색했는데 답변을 찾을 수 없습니다.
이런 함수를 정의하고 싶습니다
function \d{2} () {
echo $1_or_smth
}
그런 다음 터미널에서 말하면
12
12를 에코하고 싶습니다.
답변1
다음 방법은 zsh에서 작동합니다.
preexec() {
if [[ $1 = <-> ]]; then
$1() {
echo $0
unfunction $0
}
fi
}
귀하의 질문에 대한 의견에서 지적했듯이 변수 이름을 가진 함수를 사용할 수 없습니다. 이것이 하는 일은 preexec
후크를 사용하여 명령을 가로채고 실패하기 전에 임시 기능을 생성하는 것입니다. 나는 그 변형인 nmh 메일러를 사용하여 이메일 메시지를 숫자별로 표시합니다.
답변2
Bash를 통해 이 기능을 사용할 수 있습니다 command_not_found_handle
.
조심하세요ㅏ)일부 배포판에서는 이미 이를 사용하여 "설치"를 제공합니다.푸바사용하고 싶다면부자명령" 기능 및비)쉘 함수처럼 외부 명령을 재정의하지 않습니다.
또한 \d
bash에서 사용하는 정규식 방언은 이 =~
연산자를 지원하지 않는다는 점에 유의하세요(덧붙여서, 이것은 bash에서 정규식을 사용하는 유일한 방법입니다).
2digits(){
echo "$1_or_smth"
}
command_not_found_handle(){
if [[ $1 =~ ^[0-9]{2}$ ]]; then 2digits "$@"
else printf >&2 '%s: command not found\n' "$1"; return 127
fi
}
그 다음에
$ 33
33_or_smth
$ 444
444: command not found
이 함수를 사용하여 zsh에서도 동일한 작업을 수행할 수 있습니다 command_not_found_handler
(이름 차이에 유의하세요. zsh에는 추가 "r"이 있습니다).
preexec
bash 에서 트랩을 사용하여 zsh를 에뮬레이트할 수 있지만 DEBUG
bash는 함수 이름에 숫자만 포함하는 것을 허용하지 않기 때문에 다른 답변의 트릭을 구현할 수 없습니다.