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