周辺を検索しましたが、答えが見つかりませんでした。
このような関数を定義したい
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は関数名に数字のみを含めることができないため、他の回答のトリックを実装することはできません。