2016-04-03 22 views
1

ile çalışmaz Bildiğim kadarıyla, değişken ataması olan bir bash komutunu önceden eklerseniz, değişken hemen geçerli olacaktır. Ve bu komutta sadece etkisi olacak. Değişken ataması önekleme, echo

ben bash bu komutu çalıştı:
V=1 echo $V 

Ancak 1 beklediğim değil terminalde çıktısı değildir. Peki neden çalışmıyor?

+1

bakınız burada: http://unix.stackexchange.com/questions/126938/why-is-setting-a-variable-before-a-command -legal-in-bash –

cevap

2

Değişken, komutun değerlendirildiği (genişletilmiş) değil, onu takip eden komut ortamından geçirilecektir. Herhangi bir değişken genişleme kabuk tarafından daha önce yapılacaktır.

$ V=1 env | grep V= 
V=1 

Çalıştırmak için:

$ V=1; echo $V 
1 
+0

Aslında: 'V = 1 eval echo \ $ V', ortamda ayarlandıktan sonra 'V' değişkeninin genişletilmesini geciktiriyor. Kalıcı bir değişiklik olmadan, bir noktalı virgül (;), elbette neden olur. –

+0

@BinaryZebra Kesinlikle bir işe yarayacak bazı hile ile tembel bir değerlendirme. Çoğu durumda kaçınılamaz .. – heemayl

+0

"Hile" demek istemedim. Sadece gecikmeli değerlendirmenin açık bir gösterimi. Evet, "üretim kodunda" kaçınılmasının gerekliliğine katılıyorum. Ancak bir öğrenme aracı olarak paha biçilmezdir. –