İhraç edilen kabuk değişkenleri ile bash olmayanlar arasındaki fark


41

Bash, ihraç edilmiş olan ve olmayan olanları birbirinden ayırıyor gibi görünüyor.

örnek:

$ FOO=BAR
$ env | grep FOO
$ set | grep FOO
FOO=BAR

setdeğişkeni görür ama envgörmez.

$ export BAR=FOO
$ env | grep FOO
BAR=FOO
$ set | grep FOO
BAR=FOO
FOO=BAR

sether iki değişkeni de envgörür, ancak yalnızca verilen değişkeni görür.

Bunun setbir bash yerleşik olduğunu ve envolmadığını biliyorum .

Dışa aktarılan değişkenler ile olmayanlar arasındaki farklar nelerdir?


17
Terminoloji notu: “ortam değişkeni” her zaman verilir. Dışa aktarılmayan bir değişken bir “kabuk değişkeni” (veya “parametre”).
Gilles 'SO- kötü olmaktan vazgeç'

Yanıtlar:


44

Dışa aktarılan değişkenler dışa aktarılan kabuk tarafından yürütülen komutların ortamına taşınırken dışa aktarılan olmayan değişkenler mevcut kabuk çağrısına yereldir. Gönderen exportadam sayfası:

Kabuk, dışa aktarma niteliğini belirtilen isimlere karşılık gelen değişkenlere verecek ve daha sonra yürütülen komutların ortamında olmalarına neden olacaktır.

setverilmeyen yerel değişkenleri içeren geçerli ortamı çıkarır. envprogramları yeni bir ortamda başlatmak için kullanılır ve bu yeni ortamın ne olacağını hiçbir argüman çıkarmaz. Yana envo kabuk başlatılan herhangi bir program için olduğu gibi, yeni bir ortam yaratmak, sadece ihraç değişkenler aracılığıyla getirilir. Örneğin, ilk içine ikinci bir kabuk üretmek ( $$iç kabuktaki istemleri temsil etmek için kullanılır ):

$ FOO=BAR
$ bash
$$ echo $FOO             # Note the empty line

$$ exit
$ export FOO
$ bash
$$ echo $FOO
BAR
$$

Dışa aktarılan değişkenin sadece değerini değil olduğunu unutmayın. Size bir kez o Bu araçlar export FOO, FOOdaha sonra değiştirilemez bile daha sonraki ortamlarda kadar küresel bir değişken ve gösteriler olur:

$ export FOO
$ FOO=BAR
$ bash
$$ echo $FOO
BAR
$$

Öyleyse, yalnızca mevcut kabukla ilgileniyorsanız, dışa aktarmanız mı gerekiyor? Ayrı olarak, neden localemevcut kabuk için güncellemeleri göstermesin?
Pacerier
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.