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_HOMEunutulur. 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.
exportDeğ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=foove için ayrı komutlar gerektiriyordu export myvar, ancak tüm modern mermiler anlıyor export myvar=foo.
Kaçabilirsiniz set -aböylece tüm kabuk değişken atamaları otomatik olarak değişken ihracat yapmaya myvar=fooeşdeğerdir export myvar=fookaç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=valuesö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ı $foodaha da genişleterek alan (kelime) bölme ve yol adı genişletme (globbing) gerçekleştirir . Bu, değeri myvarise hello *, o zaman echo $myvaryazdırılır , ardından hellotek 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=$myvargüvenilir kopyalar değerini aslında myvarhiçothervarçünkü globbing ve kelime bölme ödevlerde engellenir (çünkü birden fazla kelime oluştururlar, ancak tek bir kelime beklenir). exportBununla 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.