Em zsh , = na forma de =word é um operador de expansão especial e será expandido para o caminho completo do comando denominado word se o comando existir e a opção EQUALS estiver definida .
Essa expansão não é executada entre aspas duplas, portanto, usar ${:-=cat} entre aspas duplas não funcionará:
$ TMP="${:-=cat}"
$ print -rl -- $TMP
=cat
Agora, você tem várias opções para conseguir a mesma coisa que deseja.
Não use aspas duplas:
$ FOO="blah blah blah "${:-=cat}" blah blah blah"
$ print -rl -- $FOO
blah blah blah /bin/cat blah blah blah
O módulo zsh/parameter fornece a matriz associativa commands , fornecendo acesso à tabela de hash do comando. Você pode usar $commands[name] para obter o caminho completo do comando name :
$ zmodload zsh/parameter
$ print -rl -- $commands[cat]
/bin/cat
Outra opção é usar o modificador :c :
$ var=cat
$ print -rl -- $var:c
/bin/cat
$ print -rl "foo ${${:-cat}:c} bar"
foo /bin/cat bar
Claro, você também pode usar o comando padrão command -v :
$ print -rl -- "foo $(command -v cat) bar"
foo /bin/cat bar