zsh
コマンドの解釈方法を変更するために、コマンドの前に配置される辞書コマンド修飾子があります。それらのいくつかcommand
はとですexec
。
$ zsh -c 'exec -a foo zsh -c "print -- \$0"'
foo
$ zsh -c 'command -v ls'
/bin/ls
しかし、彼らは次の主張が引用されれば、もはや受け入れません。
$ zsh -c '\exec -a foo zsh -c "print -- \$0"'
zsh:1: command not found: -a
$ zsh -c '\command -v ls'
zsh:1: command not found: -v
引用すると、他のパラメータを処理せずにすぐに実行されるように聞こえます。
command
エイリアスの命名や拡張を防ぐexec
ことはできません。
これはバグか機能ですか?どこかに文書化されていますか?
答え1
Zshは、エイリアスやキーワードと同じ方法で辞書コマンド修飾子を解析します。これは引用符なしでコマンドの先頭になければなりません。これは、コマンドの解析に影響を与える修飾子(noglob
、)に必要です。nocorrect
辞書コマンド修飾子builtin
、command
はexec
他の方法で解釈できますが、内部的に同じロジックを使用します。
私が知る限り、この論理の深い理由はありません。これは数十年前にこのように行われており、それを修正するのに十分なこの極端なケースには誰も興味を持っていなかったからです。
似たようなことが\command -v ls
合理的なことをしないことを考えると、これは間違いです。