Conforme começo a migrar do bash para o zsh, encontro muitas diferenças. Uma delas é a seguinte:
envy% echo $path
/usr/local/bin /usr/bin /bin /usr/sbin /sbin /opt/X11/bin
envy% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
Por que eles se espelham, exceto pelos espaços e dois pontos e quando você os modifica? Qual é o entendimento sobre as variáveis de ambiente zsh que não tenho aqui?
$PATH
ist uma variável escalar, enquanto$path
é uma matriz.Observe que no primeiro caso os diretórios são delimitados por dois pontos dentro da
$PATH
própria string; no segundo caso o array é automaticamente expandido e separado por espaços:Ambas as variantes são automaticamente mantidas em sincronia por zsh . Então, qual é o benefício de usar um array?
typeset -U path
para "manter apenas a primeira ocorrência de cada valor duplicado" (deman zshbuiltins
). Isso significa que isso mantém seu caminho limpo, mesmo se você originar sucessivamente o seu~/.zshrc
(porque você o alterou ou o que quer que seja) e não o sobrecarrega com os mesmos valores repetidas vezes.path+=(/new/path)
para adicionar um novo diretório ao seu PATH. Para remover um elemento, você deve usar alguns truques, veja por exemplo https://stackoverflow.com/q/3435355/2037712 ou http://www.zsh.org/mla/users//2005/msg01132.htmlfor i ($path) { print $i # or do something else }
Por fim, aqui está um trecho da minha configuração com minha tentativa de manter meu caminho de pesquisa organizado:
Fonte: Minha própria resposta para outra pergunta.