Temel olarak, bir kabuk betiğine geçirilen ortam değişkenlerini (bağımsız değişkenler olarak) ortam içinden ayarlanmışlar gibi export
, ancak export
komutları çalıştırmadan önce kalıcı olarak listelerinde kalmasına gerek kalmadan "enjekte etmek" istediğinizde kullanabilirsiniz. .
NOT:-k
Anahtarın uzun biçimi de vardır set -o keyword
.
Misal
$ cat cmd1.bash
#!/bin/bash
echo $VARCMD
Şimdi eğer ben set -k
:
$ set -k; ./cmd1.bash VARCMD="hi"; set +k
hi
Ama eğer yukarıdaki betiği çalıştırırsam:
$ ./cmd1.bash
$
İhracat ne yapıyor?
$ help export
...
Marks each NAME for automatic export to the environment of subsequently
executed commands. If VALUE is supplied, assign VALUE before exporting.
...
Eğer betiğimize şöyle eklersek export | grep VAR
:
$ cat cmd2.bash
#!/bin/bash
echo $VARCMD
export | grep VAR
Ve yukarıdaki testlerimizi tekrar yaptık:
$ set -k; ./cmd2.bash VARCMD="hi"; set +k
hi
declare -x VARCMD="hi"
Ancak set -k
:
$ ./cmd2.bash
$
Yani set -k
geçici olarak toplu olarak değişkenleri dışa aktarmamıza izin veriyor.
Başka bir örnek
$ cat cmd3.bash
#!/bin/bash
echo $VARCMD1
echo $VARCMD2
export | grep VAR
Birden çok değişken belirlediğimizde, bunların tümü dışa aktarılır:
$ set -k; ./cmd3.bash VARCMD1="hi" VARCMD2="bye"; set +k
hi
bye
declare -x VARCMD1="hi"
declare -x VARCMD2="bye"
O zaman sadece tüm çevre değişkenlerini mi enjekte ediyor?
Hayır -k
burada çok açık bir şey yapmıyor. Yalnızca bir komut yürütüldüğünde komut satırında yer alan değişkenleri dışa aktarır.
Misal
Diyelim ki bu değişkeni ayarladım:
$ VARCMD1="hi"
Şimdi aynı komutu atladığımızda VARCMD1="hi"
:
$ set -k; ./cmd3.bash VARCMD2="bye"; set +k
bye
declare -x VARCMD2="bye"
Ama bu neden var?
"Anahtar Kelime Parametre Atama Dizeleri" başlıklı bu özellik hakkında biraz açıklama yapan bu kaynağı buldum. NOT: Kaynak URL bir IP adresi kullanır, bu yüzden doğrudan burada SE'ye bağlanamam.
http://140.120.7.21/OpenSystem2/SoftwareTools/node16.html
Herhangi bir dilde programlama yaparken, değişken ve değer geçirme güvenilir kod yazmak için çok önemlidir. Tamsayı ve dizi değişkeni türlerinin yanı sıra, diğer tüm kabuk değişkenleri dizeleri değerleri olarak kabul eder. Kabuk programlama dilinden bahsederken tutarlı olmak için "anahtar kelime parametresi" ifadesini tercih ediyoruz. Anahtar kelime parametrelerine değer atarken dikkat etmeniz gereken birkaç nokta:
Beklenmeyen bir etkiyi önlemek için, parametre atama alt dizesini her zaman bir komut dizesinin önüne yerleştirin.
B kabuğunda, anahtar kelime parametrelerinin atanan değerleri (yerel) kabuk değişkenlerinde saklanır. Bash ve ksh öğelerinde, komuttan önceki anahtar kelime parametre atama dizeleri kabuk değişkenlerinde saklanmaz. Yalnızca geçerli komutu yürütmek için çatallanan anlık alt işlemi etkiler. Tek başına anahtar kelime parametresi atama dizeleri, (yerel) kabuk değişkenlerinde depolanır. Anahtar kelime parametresi atama dizeleri, takma ad, bildirim, dizgi, dışa aktarma, salt okunur ve yerel yerleşik komutlara bağımsız değişken olarak da görünebilir. [Bash Referans El Kitabı Bölüm 3.4]
Anahtar kelime parametresi atama dizeleri, komut adından sonra yerleştirilirse yürütülecek komutun bağımsız değişkenleri olarak ele alınır.
- Anahtar kelime parametreleri set komutu ile değiştirilebilir.
-k
Bizim onları gözden geçirmeniz gerek kalmadan 30 yaşındaki kabuk komut dosyalarını çalıştırmak için izin verir. Bunun yerine önek sözdizimini kullanarak geçici ortam değişkenlerinivar1=x var2=y command ...