2009-03-06 24 views
2

Bu satır neden "?" Yerine "z" olur?Soru işareti neden Ruby'de "z" olarak yorumlanır

$ yakut -e 'x% koyar [# echo { "?"}]'

# {...} içindeki ifadesi "?" Değerini olabilir bir değişkendir varsayalım. Bu betiği, "z" yerine soru işareti çıkacak şekilde nasıl değiştirmeliyim?

(bu sorunun başlığını affet -. Henüz daha açıklayıcı bir başlık sağlamak için burada yeterince neler olduğunu anlamıyorum)

+0

Bu işletim sistemi nedir? Windows üzerinde üretemiyorum, kabuğun bir şey yapıp yapmadığını merak ediyorum. – AShelly

cevap

1

Gelmez?

irb(main):001:0> puts %x[echo #{"?"}] 
? 
=> nil 

# {} kullanarak içeride size herhangi değişkenlerin değeri verecektir - Eğer

puts %x[echo "?"] 

ya da sadece

puts '?' 
7

yerine kullanıyorlar neden emin değilim O yakut değil, senin kabuğun.

Birçok kabuk genişliyor? Komut satırı argümanlarında tek bir karakterle eşleşecek karakter. Eğer Tempa, temp1, tempB, ..., istediğiniz temp9 silmek adı dosyaların bir grup var eğer, kullanışlı, ama 'tapınak' Yani'

% rm temp? 

silmek istemiyorum 'z' adlı çalışma dizininizde bir dosya veya dizininiz olduğunu tahmin ediyorum ve? eşleşir, bu yüzden kabuk tarafından değiştirilir.

Normalde, tek tırnak içine alındığında (ruby komut dosyanız gibi) genişletilemez, ancak soru işaretini bir kabuk komutuna aktardığınız zaman, oraya genişletilir.

% ruby -e 'puts %x[ echo ? ]' 
z 
% 

Size aynı davranışı göstermelidir. Eğer bir çift abcd gibi diğer tek karakter dosya adları dokunursanız

Ayrıca, bunların da göstermek gerekir:

% touch a b c 
% ruby -e 'puts %x[ echo ? ]' 
a b c z 
% 

Eğer yakut içinden dış kabuk komutlarını çağrılırken Bunu önlemek istiyorsanız, size gerekecek Çıktığın dizelerden kaçmak için. Çoğu amaç için String#inspect yeterince iyi bir kaçma vermelidir.

İlgili konular