Kabuk değişkeni ve Ortam değişkeni, ikisi de aynı ada sahipse hangisi tercih edilir?


10

Bash'e aşağıdakileri yazın:

env | grep USER

ve

set | grep USER

iki kere aynı kullanıcı adını verir.

Örneğin echo $USER, kabuğun veya ortam değişkeninin görüntülenip görüntülenmediğini yazarken nasıl bilebilirim ?

Yanıtlar:


14

İçin POSIX uyumlu kabukları (Bash dahil), standart diyor ki:

2.5.3 Kabuk Değişkenleri
Değişkenler ortamdan başlatılır [...] Bir değişken ortamdan başlatılırsa, derhal ihracat için işaretlenir; ihracat özel yerleşik bakın. Yeni değişkenler, değişken atamaları, [vb.] İle tanımlanabilir ve başlatılabilir .

Ve hakkında export:

export name[=word]...
Kabuk, verme niteliğini, belirtilen adlara karşılık gelen değişkenlere verir; bu, daha sonra yürütülen komutlar ortamında olmalarına neden olur.

Kabuğun bakış açısından, sadece değişkenler vardır. Bazıları kabuk başlatıldığında ortamdan gelmiş olabilir ve bazıları da kabuğun başladığı işlemlerin ortamına aktarılmış olabilir.

("Çevre" gerçekten başladığında sürece sadece bir dizi dizeden geçer. Süreç çalışırken, ondan hoşlandığı her şeyi yapabilir, onu kullanabilir, görmezden gelebilir, üzerine yazabilir. diğer süreçlere başlamak başka bir şey olabilir, ancak elbette tüm çevre değişkenlerini tekrar geçirmek normaldir.)


POSIX olmayan bir kabuk kullanıyorsanız csh, işler farklı olabilir:

$ csh
% echo $foo
foo: Undefined variable.
% setenv foo bar
% echo $foo
bar
% set foo=asdf
% echo $foo
asdf
% env |grep foo
foo=bar
% exit

1
Bourne kabuğunun, csh gibi, kabuk değişkenlerini ortam değişkenlerinden başlattığını unutmayın. Ancak kabuk değişkenlerini değiştirmek, siz dışa aktarmadığınız sürece ilgili ortam değişkenini etkilemez. Bu Korn kabuğu tarafından kırılan (ve POSIX tarafından belirtilen) bir şey. Bu nedenle, betiğinizde çalıştırdığınız komutları etkileyebilecek env değişkenlerini değiştirmediğinizden emin olmak için şu anda kullandığınız kabuk değişkenlerinin adlarına dikkat etmelisiniz.
Stéphane Chazelas

4

Bunlar bir ve aynı değişkenlerdir. Kabukta, diğer programlama dillerinin aksine, ortam değişkenleri ve kabuk değişkenleri aynı ad alanını paylaşır. Kabukta, bir ortam değişkeni, dışa aktarılmış olan bir kabuk değişkenidir export.

Örneğin, bir önceki " Kabuk değişkenleri ve ortam değişkenleri arasındaki kullanım farkı nedir? "


Açıklamanızı tekrar okuyacağım, cevabınızı anlamadan önce sadece bazı şeyleri öğrenmem gerekiyor.
köpekbalığı

@sharkant Hiç endişelenme. Eğer bir şeyleri karıştırırsam, o zaman söyle bana ve açıklığa kavuşturmaya çalışacağım. ilkkachu'nun yanıtı da iyidir.
Kusalananda

Hayır, sanmıyorum, iyi bir açıklama tarzınız var, bu onları henüz besleyemeyen sadece benim bilgi eksikliğim.
köpekbalığı

2

Kabuk Değişkeni yalnızca geçerli kabuğa kullanılabilir, sistem çapında kullanılamaz. Diğer taraftan Çevresel Değişken Sistem Genişliğinde kullanılabilir. Geleneksel olarak Shell Değişkeni küçük harf, Çevre Değişkeni büyük harf olarak yazılır. Kabuk değişkeninin ortam değişkeni olarak çalışmasını sağlayabilirsiniz, dışa aktarmanız yeterlidir.

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.