2009-03-06 4 views
2

Warum gibt diese Zeile "z" anstelle von "?"Warum wird das Fragezeichen in Ruby als "z" interpretiert?

$ ruby ​​-e 'setzt% x [# echo { "?"}]'

Angenommen, der Ausdruck in der # {...} ist eine Variable, die den Wert von "?" Haben kann. Wie sollte ich dieses Skript ändern, so dass das Fragezeichen anstelle von "z" ausgegeben wird?

(Bitte vergeben den Titel dieser Frage -. Ich weiß noch nicht verstehen, was hier vor sich geht gut genug, um einen aussagekräftigeren Titel zur Verfügung zu stellen)

+0

Welches Betriebssystem ist das? Ich kann unter Windows nicht reproduzieren, ich frage mich, ob deine Shell etwas funky macht. – AShelly

Antwort

1

nicht?

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

# Arbeiten mit {} geben Sie den Wert der Variablen innerhalb - ich bin mir nicht sicher, warum Sie es verwenden, anstatt

puts %x[echo "?"] 

oder nur

puts '?' 
7

Es ist nicht Rubin, es ist deine Hülle.

Viele Shells die erweitern? Zeichen, um ein einzelnes Zeichen in Befehlszeilenargumenten zu finden. Es ist nützlich, wenn Sie eine Reihe von Dateien Name Tempa, TEMP1, TEMPB, ..., temp9, die Sie löschen wollen, aber Sie wollen nicht löschen ‚Tempel‘

% rm temp? 

So bin ich Ich nehme an, Sie haben eine Datei oder ein Verzeichnis in Ihrem Arbeitsverzeichnis namens 'z', und die? passt das, also wird es durch die Shell ersetzt.

Normalerweise, wenn in einfachen Anführungszeichen (wie Ihre Ruby-Skript) ist es nicht erweitert bekommen würde, aber da Sie die Fragezeichen zu einem Shell-Befehl vorbei sind, wird es dort erweitert.

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

Sollte Ihnen das gleiche Verhalten zeigen.

Auch, wenn Sie ein paar andere einzelne Zeichen Dateinamen wie ABCD berühren, diejenigen zeigen, sollte:

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

Wenn Sie dies vermeiden wollen, wenn aus rubinAußen Shell-Befehle aufrufen, müssen Sie um irgendwelchen Strings zu entgehen, die du verpasst hast. Für die meisten Zwecke sollte String#inspect eine gute genug geben, um zu entkommen.

Verwandte Themen