Dalam FreeBSD 12, menggunakan zsh
shell, saya melihat perbedaan ini ketika melihat $path
(huruf kecil) versus $PATH
(huruf besar).
echo $path
/ sbin / bin / usr / sbin / usr / bin / usr / lokal / sbin / usr / lokal / bin / usr / home / freebsd / bin
echo $PATH
/ sbin: / bin: / usr / sbin: / usr / bin: / usr / local / sbin: / usr / local / bin: / usr / home / freebsd / bin
Satu output dibatasi oleh karakter SPACE, yang lainnya oleh karakter COLON.
➥ Mengapa bedanya?
Apakah kedua variabel ini berbeda dan terpisah? Atau apakah huruf kecil / huruf besar memicu semacam trik atau makna yang tidak saya ketahui?
Apakah ini zsh
fitur? Atau fitur FreeBSD?
path
dalamzsh
tidak akan memperbaruipath
envvar:path=junk zsh -c 'echo $path; path=garbage; /usr/bin/printenv path'
.for path in "$dir"/*
refleks aman-untuk-menulis kode.Jawaban:
Itu fitur yang
zsh
diwarisi daricsh
/tcsh
.The
$path
Array variabel terikat dengan$PATH
skalar (string) variabel. Setiap modifikasi pada satu tercermin pada yang lain.Dalam
zsh
(bertentangan dengan(t)csh
), Anda dapat mengikat variabel lain selain$PATH
dengantypeset -T
. Itu konvensional, tetapi tidak wajib, untuk menggunakan nama huruf besar untuk skalar yang dipisahkan titik dua dan nama yang sama dalam huruf kecil untuk array. Sementara titik dua adalah pemisah default, pemisah lainnya dapat digunakan (misalnya baris baru untuk mengikat string multi-baris ke array, atau koma untuk mengikat baris csv ke array)Dalam versi terbaru dari
zsh
,typeset -p PATH
atautypeset -p path
menunjukkan tautan antara dua variabel:Itu berguna karena membuatnya lebih mudah untuk menambahkan menghapus komponen atau mengulanginya.
Melakukan
typeset -U path
untuk membuat elemen unik juga membantu menjaga$PATH
variabel tetap bersih (sesuatu yang serupa dapat dicapaitcsh
denganset -f
).sumber