Kabuk değişkenleri ve ortam değişkenleri
MY_HOME="/home/my_user"
adlı kabuk değişkenini ayarlar MY_HOME
. Kabuklar programlama dilleridir ve değişkenleri vardır (parametreler olarak da adlandırılır). Bu atamadan sonra, değişkenin değerini kullanabilirsiniz;echo "$MY_HOME"
.
Kabuk değişkenleri bir iç kabuk konseptidir. Bu kabuk örneği sona erdiğinde MY_HOME
unutulur. Her programın bildikleri ve çocuklarına ilettikleri ortam değişkenleridir .
Kabuğun içinde, ortam değişkenleri ve kabuk değişkenleri çok benzer şekillerde çalışır. Gerçekte olan şey, kabuğun üst öğesinden devraldığı tüm ortam değişkenlerinin kabuk değişkenleri haline gelmesidir. Tersine, bir kabuk betiğinde tanımlanan kabuk değişkeni, dışa aktarırsanız bir ortam değişkeni haline gelir .
export MY_HOME="/home/my_user"
İlk okumaya atlayabileceğiniz daha fazla ayrıntı
Kabuk değişkenlerinin otomatik olarak ortam değişkeni haline gelmemesinin nedeni, bir komut dosyasının yanlışlıkla başlattığı bir program için anlamlı olan ve kısmen de tarihsel bir değişken adı kullanabilmesidir.
export
Değişken adını her değiştirdiğinizde çok eski kabukların kullanılması gerekir , ancak tüm modern kabuklar ortam değişkenleri için atamaları izler, böylece aşağıdaki snippet yankılanır bar
:
myvar=foo
export myvar
myvar=bar
env | grep '^myvar='
Ayrıca, bazı çok eski mermiler myvar=foo
ve için ayrı komutlar gerektiriyordu export myvar
, ancak tüm modern mermiler anlıyor export myvar=foo
.
Kaçabilirsiniz set -a
böylece tüm kabuk değişken atamaları otomatik olarak değişken ihracat yapmaya myvar=foo
eşdeğerdir export myvar=foo
kaçtın eğer set -a
öncelikle bu kabukta.
Alıntı yapıldığında
Alıntı çoğunlukla diktir. Değişkene atadığınız değer kabuğa özel hiçbir karakter içermiyorsa, tırnak işaretine ihtiyacınız yoktur. Özel karakterler varsa, bunları tek tırnak veya çift tırnak veya ters eğik çizgi veya bunların bir kombinasyonu ile korumanız gerekir. Bu hem düz myvar=value
sözdizimi hem deexport
yardımcı program için geçerlidir.
Atama sözdizimi ile sözdizimi arasında bir fark vardır export
. Kabuk, değişken ikamelerin sonuçlarını $foo
daha da genişleterek alan (kelime) bölme ve yol adı genişletme (globbing) gerçekleştirir . Bu, değeri myvar
ise hello *
, o zaman echo $myvar
yazdırılır , ardından hello
tek bir boşluk ve ardından geçerli dizindeki dosya listesi gelir. Bu dolayısıyla genel ilke, hemen hemen hiç arzu edilir hep değişken değiştirmelerin çift tırnak kullanmak (sen genişleme veya alan bölme pathname gerek biliyorum sürece): echo "$myvar"
. Basit bir atama söz konusu olduğunda, othervar=$myvar
güvenilir kopyalar değerini aslında myvar
hiçothervar
çünkü globbing ve kelime bölme ödevlerde engellenir (çünkü birden fazla kelime oluştururlar, ancak tek bir kelime beklenir). export
Bununla birlikte, bu dağıtım için geçerli değildir . Basit bir kuralı hatırlamak istiyorsanız, değişken ikamelerin çevresinde her zaman çift tırnak kullanın.