Eğer kullandığınız zaman LANG=C gcc ...
ne olur kabuk için LANG setleri olmasıdır gcc
bireyin çevreye sadece ve değil için geçerli bir ortamda kendisi ( nota bakın ). Bu yüzden gcc
bittikten sonra LANG
önceki değerine geri döner (veya ayarlanmadan).
Ek olarak, onu kullandığınızda , eko yerine, $ A'nın yerine A=10 echo $A
geçen kabuktur ve bu değiştirme ("genişleme" olarak adlandırılır) ifadenin değerlendirilmesinden önce gerçekleşir (atama dahil), bu nedenle beklenen A
değerin önceden ayarlanmış olması gerekir. içinde geçerli olduğunu açıklamaya öncesinde çevre.
Bu yüzden A=10 echo $A
beklendiği gibi çalışmaz: A=10
yankı için ayarlanır, ancak yankı içsel olarak ortam değişkeninin değerini yok sayar A
. Ve $A
şu anki kabuğunda ayarlanan (hiçbiri olmayan) değerle değiştirilir ve sonra yankıya bir argüman olarak iletilir.
Sizin varsayım doğruysa Yani: VAR=value command
does işi, ancak bu yalnızca alakalı command
içten kullandığı VAR. Değilse, hala geçebilir value
bir şekilde argüman için command
, ama argümanlar ile değiştirilir akım onlar kullanım öncesinde ayarlanmalıdır böylece, kabuk:VAR=value; command "$VAR"
Yürütülebilir bir komut dosyasının nasıl oluşturulduğunu biliyorsanız, bunu bir test olarak deneyebilirsiniz:
#!/bin/sh
echo "1st argument is $1"
echo "A is $A"
Farklı kaydet testscript
ve dene:
$ A=5; A=10 testscript "$A"; echo "$A"
1st argument is 5
A is 10
5
Son fakat en az değil, kabuk ve çevre değişkenleri ve program argümanları arasındaki farkı bilmeye değer .
İşte bazı iyi referanslar:
.
(*) Not: Teknik olarak kabuk gelmez Bazı komutlar gibi: neden burada da mevcut ortamda ayarlanır ve var echo
, read
ve test
olan kabuk yerleşikleri ve bu nedenle onlar bir çocuk süreç yumurtlamaya yoktur. Mevcut ortamda koşuyorlar. Ancak, kabuk atama için sadece komut çalışana kadar devam eder, bu nedenle tüm pratik amaçlar için etki aynıdır: atama sadece o tek komut tarafından görülür.
A=10 (echo $A)
ve alabilir10
miyim?