No FreeBSD 12, usando o zsh
shell, notei essa diferença ao olhar para $path
(minúsculas) versus $PATH
(maiúsculas).
echo $path
/ sbin / bin / usr / sbin / usr / bin / usr / local / sbin / usr / local / bin / usr / home / freebsd / bin
echo $PATH
/ sbin: / bin: / usr / sbin: / usr / bin: / usr / local / sbin: / usr / local / bin: / usr / home / freebsd / bin
Uma saída é delimitada pelo caractere ESPAÇO, a outra pelo caractere COLON.
➥ Por que a diferença?
Essas duas variáveis são diferentes e separadas? Ou as letras minúsculas / maiúsculas acionam algum tipo de truque ou significado que eu não conheço?
Isso é um zsh
recurso? Ou um recurso do FreeBSD?
path
dentrozsh
não vai atualizar qualquerpath
envvar:path=junk zsh -c 'echo $path; path=garbage; /usr/bin/printenv path'
.for path in "$dir"/*
um código reflexivamente seguro para escrever.Respostas:
Essa é uma característica
zsh
herdada decsh
/tcsh
.A variável de
$path
matriz está vinculada à variável$PATH
escalar (string). Qualquer modificação em um é refletida no outro.Em
zsh
(ao contrário(t)csh
), você pode amarrar outras variáveis junto$PATH
comtypeset -T
. É convencional, mas não obrigatório, usar um nome em maiúsculas para o escalar separado por dois pontos e o mesmo nome em minúsculas para a matriz. Enquanto dois pontos é o separador padrão, outros separadores podem ser usados (por exemplo, nova linha para amarrar uma sequência de linhas múltiplas a uma matriz ou vírgula para amarrar uma linha csv a uma matriz)Nas versões recentes de
zsh
,typeset -p PATH
outypeset -p path
mostra o link entre as duas variáveis:Isso é útil, pois facilita adicionar componentes de remoção ou fazer um loop sobre eles.
Fazer um
typeset -U path
para tornar os elementos únicos também ajuda a manter a$PATH
variável limpa (algo semelhante pode ser alcançadotcsh
comset -f
).fonte