Zsh ile $ path ve $ PATH (küçük harfle büyük harf) arasındaki fark nedir?


13

In FreeBSD 12 kullanılarak zshkabuk, ben bakarak bu farkı fark $pathkarşı (küçük harflerle) $PATH(büyük harf).

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: / freebsd / bin / usr / home

Bir çıkış SPACE karakteriyle, diğeri COLON karakteriyle sınırlanır.

➥ Neden fark var?

Bu iki farklı, ayrı değişken mi? Yoksa küçük harf / büyük harf bilmediğim bir tür hile veya anlamı tetikliyor mu?

Bu bir zshözellik mi? Veya FreeBSD'nin bir özelliği?


1
Bir kenara: POSIX uyumlu herhangi bir kabukta, küçük harfli değişken adlarının uygulama kullanımı için güvenli olduğu garanti edilir (değiştirildiğinde kabuk veya sistem davranışını sessizce değiştirmemek için). Bu, zsh'ın standardı takip etme kararının sadece kendileri için anlamlı olduğu yerlerde senaryo yazarları için baş ağrısı yaratabileceği yerlerden biridir, çünkü standart garantiler geçerli değildir.
Charles Duffy

@CharlesDuffy, standardın küçük ve büyük harf değişkenleri hakkında herhangi bir şey söylediği kısmına bir bağınız var mı? Teşekkürler.
mosvy

@mosvy, pubs.opengroup.org/onlinepubs/9699919799/basedefs/… - kabuk ve ortam değişkenlerinin tek bir ad alanını paylaştığını akılda tutarak okuyun (kabuk değişkeninin ayarlanması, mevcut benzer adlandırılmış ortam değişkeninin değerini güncelleştirir; bir ortam değişkeninin ayarlanması kabuk değişkenlerini başlatır). Belirli satırlar: Küçük harf içeren ortam değişkeni adlarının ad alanı uygulamalar için ayrılmıştır. Uygulamalar, standart yardımcı programların davranışını değiştirmeden bu ad alanındaki adlara sahip ortam değişkenlerini tanımlayabilir.
Charles Duffy

@CharlesDuffy Burada geçerli değil. Ayar pathiçeride zshherhangi güncellemeyecektir pathenvvar: path=junk zsh -c 'echo $path; path=garbage; /usr/bin/printenv path'.
mosvy

@mosvy, beni standartın mektubunu ihlal etmediğine ikna ettin. Ruhu , diğer taraftan, yapacak for path in "$dir"/*refleksle güvenliği konumu yazma kodu.
Charles Duffy

Yanıtlar:


20

Bu / zshkaynağından devralınan bir özelliktir .cshtcsh

$path Dizi değişkeni olduğunu bağladılar için $PATH sayıl (dize) değişken. Birindeki herhangi bir değişiklik diğerine yansır.

In zsh(aksine (t)csh), sen yanında diğer değişkenleri bağlayabiliriz $PATHile typeset -T. İki nokta üst üste ile ayrılmış skaler için bir büyük harf adı ve dizi için küçük harfle aynı adı kullanmak geleneksel ancak zorunlu değildir. İki nokta üst üste varsayılan ayırıcı olsa da, diğer ayırıcılar kullanılabilir (örneğin, bir diziye çok satırlı bir dize bağlamak için yeni satır veya bir diziye bir csv satırı bağlamak için virgül)

Son sürümlerinde zsh, typeset -p PATHya typeset -p pathgösterileri iki değişken arasındaki bağlantı:

% typeset -p path
typeset -aT PATH path=( /home/chazelas/bin /usr/local/bin /usr/bin /bin )

Bu, kaldırılabilir bileşenleri veya döngülerin eklenmesini kolaylaştırması açısından faydalıdır.

Bir yaparak typeset -U pathelemanları yapmak için benzersiz ayrıca tutarak yardımcı $PATHdeğişken temiz (elde edilebilir benzer bir şey tcshile set -f).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.