En FreeBSD 12, usando el zsh
shell, noté esta diferencia al mirar $path
(minúsculas) versus $PATH
(mayú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
Una salida está delimitada por el carácter ESPACIO, la otra por el carácter COLON.
➥ ¿Por qué la diferencia?
¿Son estas dos variables diferentes y separadas? ¿O las minúsculas / mayúsculas desencadenan algún tipo de truco o significado que no conozco?
¿Es esta una zsh
característica? ¿O una característica de FreeBSD?
path
el interiorzsh
no se actualizará cualquierpath
varentorno:path=junk zsh -c 'echo $path; path=garbage; /usr/bin/printenv path'
.for path in "$dir"/*
un código reflexivamente seguro para escribir.Respuestas:
Esa es una característica de
zsh
heredado decsh
/tcsh
.La variable de
$path
matriz está vinculada a la variable$PATH
escalar (cadena). Cualquier modificación en uno se refleja en el otro.En
zsh
(contrario a(t)csh
), puede vincular otras variables además de$PATH
contypeset -T
. Es convencional, pero no obligatorio, usar un nombre en mayúscula para el escalar separado por dos puntos y el mismo nombre en minúscula para la matriz. Si bien los dos puntos son el separador predeterminado, se pueden usar otros separadores (por ejemplo, nueva línea para vincular una cadena de varias líneas a una matriz o una coma para vincular una fila csv a una matriz)En versiones recientes de
zsh
,typeset -p PATH
otypeset -p path
muestra el enlace entre las dos variables:Eso es útil porque hace que sea más fácil agregar componentes de eliminación o recorrerlos.
Hacer un
typeset -U path
para que los elementos sean únicos también ayuda a mantener$PATH
limpia la variable (se puede lograr algo similartcsh
conset -f
).fuente