Ortam değişkeni vs Shell değişkeni, fark nedir?


Yanıtlar:


35

$BASHBir olan yerel değişken akım (bash) geçerlidir sadece kabuk.

Gibi ortam değişkenleri$SHELL sistem genelinde geçerlidir. Bir Bash kabuğunda, $BASHyürütme yolu işaret Bash ise, $SHELLkabuk noktaları (aynı değere sahip olabilir), varsayılan olarak tanımlanır.

Çevre değişkenlerinin açıklaması için Ubuntu Yardımında Çevre Değişkenleri bölümüne bakınız .


1
Harika bir link (+1) :)
Peter.O

12
Bu cevap yanlış / yanlış. Ortam değişkenleri global / sistem genelinde DEĞİLDİR. Kabuk değişkenlerdir özel için şu anda çalışan kabuk ve onlar tüm alt süreçlerine (geçti) ihraç DEĞİLDİR. Ortam değişkenleri herhangi bir alt işleme aktarılır. "MYVAR = private; export OURVAR = paylaşılan; printenv" yalnızca "OURVAR" ı rapor eder çünkü kabuk, printenv komutunu yürüttüğünde, OURVAR'ı dışa aktarır, ancak MYVAR'ı dışa aktarır.
CM,

2
+1 to CM'nin Yorumu! Bu kadar basit ve doğru bir şekilde açıklanan farkı hiç duymamıştım !!! Bu yorum cevap olmalı.
Rüzgar Gezintisi Jesse,

48

Bir ortam değişkeni, bir programda ve alt programlarda küresel olarak bulunur. Bir kabuk değişkeni yalnızca geçerli kabukta kullanılabilir. Bir kabuk değişkenini bir ortam değişkeni olarak kullanılabilir yapmak için, export VARNAME(doları olmadan $) kullanın .

Açıklama için örnekler:

$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR

Bir ortam değişkenini tanımlamanın başka bir yolu:

$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE

Bunun doğru olduğunu sanmıyorum. exportmutlaka bir ortam değişkeni ayarlamaz. stackoverflow.com/questions/7411455/…
Chris Stryczynski

3
@ChrisStryczynski export, alt işlemler için bir ortam değişkeni belirler. Bağladığınız gönderi bu cevaba aykırı değil, neden yanlış olduğunu düşündüğünüzü açıklayabilir misiniz?
Lekensteyn

exportkesinlikle bir ortam değişkeni ayarlayın
David Tonhofer

8

Bir fark var. Shell Değişkenleri ve Çevre Değişkenleri bunu yapabileceğimi daha iyi açıklayacaktır, ancak işte ondan bir alıntı:

Bir kabuk değişkeninde bir değişiklik yapılırsa, herhangi bir çatallı alt işlemin değişikliği görmesi için açıkça ilgili ortam değişkenine "dışa aktarılması" gerekir. Shell değişkenlerinin tanımlandıkları shell'de yerel olduklarını hatırlayın.


Kendi cevabımı yorumluyorum .. Takkat'ın cevabındaki Yardım Ubuntu bağlantısını gerçekten seviyorum ... (benimkinden daha iyi)
Peter.O

3
Ayrıca bağlantınız artık çalışmıyor!

1

Kabuk Değişkeni: Kısa Vadeli, Yalnızca kabuğun geçerli örneğine uygulanır, Uygulanamaz sistem çapında değil

Çevresel Değişken: Uzun Süreli Kullanım, Geçerli Sistem Çapında, Küresel Olarak İzin Verilen

Kurallara göre, Shell Değişken Envn. Değişkenler büyük harf olarak yazılmıştır.


-1

Bu soruyu cevaplamak için önce değişkenin kapsamını anlamaya çalışın.

SOME_ENV_VARIABLE="testing.txt"İçinde olduğu gibi yeni bir değişken oluşturduğunuzda SHELL scope, bu , kullanıcının oturum açtığı kabuk örneğiyle erişilebileceği anlamına gelir . Örnek değiştiğinde, örneğin yeni bir terminal açarsınız veya kabuğu değiştirirsiniz (örneğin, geçmek için csh) bu değişkene erişemezsiniz.

Bu değişkene benzer bir değişkeni dışa aktardığınızda export SOME_ENV_VARIABLE, şimdi kapsamda kullanılabilir, bu durumda , kabuğu değiştirirseniz, yine de bu değişkene erişebilirsiniz. Aşağıdaki örnekle anlamaya çalışalım:

[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.

Analoji: İki yatak odalı bir daireniz olduğunu ve başka bir oda arkadaşı ile paylaştığınızı varsayalım. Ortak alana, yatak odanızdan değil herkes tarafından erişilebilir, ortam değişkeni ortak alan ve kabuk değişkeni yatak odası gibidir, eğer ortak bir alanda olacaksanız herkes tarafından erişilebilir, ancak yatak odanızda tutulursa sizin tarafınızdan erişilebilir.

Yeni bir terminal açarsanız, bu örneği değiştirdiğiniz için değişkenlerin hiçbirine erişemeyeceksiniz . Bunun için değişkenlerinizi .profileveya eklemeniz gerekir .bashrc(bash kullanıyorsanız).

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.