Bash “a = b” ve “export a = b” arasındaki fark


50

Aradaki fark nedir:

a=b

ve

export a=b

Bash olarak mı?

İkisinin de çevre değişkenlerini tanımladığını biliyorum, ancak farkı tamamen anlamıyorum.


Biri lütfen bunu düzenleyebilir mi? Bu kesinlikle Linux ile ilgili değil, sadece kullandığınız kabuğa bağlı. Sanırım burada da bash, bu da Windows'ta çalışıyor.
saat

Düzeltilmiş duruyorum.
Adam Matan

Yanıtlar:


54

export değişkeni alt işlemlere geçirir.

Örneğin, eğer yaptıysanız

FOO=bar

o zaman FOO'yu kontrol eden bir alt işlem değişkeni bulamazdı.

export FOO=bar

alt işlemin onu bulmasına izin verirdi.

Ancak FOO, zaten bir ortam değişkeni olarak tanımlandıysa, o FOO=barzaman ortam değişkeninin değerini değiştirir.

Örneğin:

FOO=one     # Not an environment variable
export FOO  # Now FOO is an environment variable
FOO=two     # Update the environment variable, so sub processes will see $FOO = "two"

Eski mermiler export FOO=barsözdizimini desteklemiyordu ; yazmak zorundaydın FOO=bar; export FOO.


33
Aslında " export" kullanmazsanız , bir ortam değişkeni tanımlamıyorsunuz, sadece bir kabuk değişkeni tanımlıyorsunuz. Kabuk değişkenleri yalnızca kabuk işleminde kullanılabilir; ortam değişkenleri mevcuttur herhangi sonraki süreçte sadece kabukları. Ek olarak, alt kabuklar parantez içinde yer alan ve kabuk değişkenlerine erişebilen komutlardır, oysa bahsettiğiniz şey kabukları olan alt süreçlerdir.
wfaulk

Bunlar nerede saklanıyor?
HDave

28

Eğer kullanmıyorsanız export, bir ortam değişkeni tanımlayan değiliz; Sadece bir kabuk değişkeni.

Kabuk değişkenleri yalnızca kabuk işlemi için kullanılabilir; çevre değişkenleri, sadece kabuklar için değil, sonraki işlemlerde kullanılabilir.


2

Ayrıca, değişkeni dışa aktarma kullanmadan çağıran kabuk için kullanılabilir duruma getirmek istiyorsanız, bunu yapabilirsiniz:

A.ksh dosyası -

#!/bin/ksh
FOO=bar

Komut isteminde, bunu çalıştırın

> . a.ksh

Bu komutları aynı kabuk içinde çalıştıracak ve $ FOO kullanılabilir olacaktır.

Buna karşılık,

> a.ksh

$ FOO 'yu yalnızca a.ksh içinde hazırlar, a.ksh çağrısından sonra mevcut olmaz.


1
Doğru. Bunu not et "." sadece daha iyi okunabilirlik için komut dosyalarında kullanılan "kaynak" kısayoludur. Bkz. "Yardım" veya "yardım kaynağı" ayrıntılar için.
sleske

1

Daha önce cevaplanmış olanlara ek olarak, bu ifadelerin her ikisi de "a" değişkenini bir kabuk veya ortam değişkeni olarak var olabileceği için mutlaka tanımlamaz (yani, vs set set).

İkinci durumda, her iki ifade de kesinlikle aynıdır.

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.