2016-07-19 19 views
-1
regsub -all "\\\\033" $cmd "\033" cmd 
[regsub -all "\\\\c" $cmd "" cmd] 
regsub -all "\\\\$i" $cmd [lindex $exp_out $i] cmd 

Kann jemand Bedeutung dieser drei Aussagen erklären? Sie sind drei verschiedene Aussagen.Erklären Regsub-Aufrufe

+0

Siehe Handbuch der [Tcl-Syntax] (http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm) und des [regsub-Befehls] (http://www.tcl.tk/) man/tcl8.5/TclCmd/regsub.htm). – pynexj

Antwort

1

regsub -all "\\\\033" $cmd "\033" cmd

Diese alle Instanzen eines umgekehrten Schrägstrich durch 033 mit dem ASCII-ESC Zeichen folgt ersetzt. Es liest die zu verarbeitende Zeichenfolge aus der cmd-Variablen und schreibt sie zurück in diese Variable.

[regsub -all "\\\\c" $cmd "" cmd]

Diese alle Instanzen eines umgekehrten Schrägstrich durch c mit dem leeren String (es effektiv zu löschen), gefolgt ersetzt. Es aktualisiert die Variable cmd. Es ersetzt in seinem aufrufenden Kontext die Anzahl der durchgeführten Substitutionen.

regsub -all "\\\\$i" $cmd [lindex $exp_out $i] cmd

Das hier ist ein wenig komplexer. Für einen bestimmten numerischen Index, der in der Variablen i gespeichert ist, ersetzt er alle Instanzen eines umgekehrten Schrägstrichs gefolgt vom Index durch das i 'te Element (zählt von 0) der Liste in exp_out. Es aktualisiert die Variable cmd.

+0

In diesen regulären Ausdrücken gibt es vier Backslashes, weil sie in _twice_, einmal für Tcl und einmal für die RE-Engine selbst in Anführungszeichen gesetzt werden. –

+0

Dies ersetzt alle Instanzen eines umgekehrten Schrägstrichs gefolgt von 033 durch das ASCII-ESC-Zeichen. Er liest die zu verarbeitende Zeichenfolge aus der cmd-Variablen und schreibt sie zurück in diese Variable. Kannst du das bitte klären? Ich habe keine 033 in meinem cmd – user6569320

+0

expect_out ($ j, string), Können Sie darüber klären? Wie viele zuvor übereinstimmende Ausgänge werden gespeichert? – user6569320