(fast) nichts funktioniert, solange Sie verwenden geschweifte Klammern. Der beste Vorschlag ist die Liste Befehl zu verwenden:
set confCmds [list command1 command2 $cmd_ts]
sage ich (fast) da Sie subst verwenden können Variablensubstitution auf confCmds zu tun, aber das ist nicht wirklich das, was Sie wollen, und das ist voller Gefahren. Was Sie wollen, ist eine Liste von Wörtern, von denen eines oder mehrere durch eine Variable definiert werden können. Genau das bietet die obige Lösung.
Wenn Sie möchten, können Sie die Befehle auf mehr als eine Zeile verteilt, indem Sie den Backslash:
set confCmds [list \
command1 \
command2 \
$cmd_ts \
]
Diese Lösung setzt voraus, dass das, was Sie wollen eine Tcl-Liste ist. Dies kann oder kann nicht sein, was Sie wollen, es hängt alles davon ab, wie Sie diese Daten nachgelagert behandeln.
In einem Kommentar, den Sie schrieb, dass, was Sie wirklich wollen, eine Reihe von Newline getrennte Elemente ist, in dem Fall, dass Sie nur doppelte Anführungszeichen, zum Beispiel verwenden können: mit
set confCmds "
command1
command2
$cmd_ts
"
, die Ihnen eine Zeichenfolge mehrere Zeilen durch Zeilenumbrüche getrennt. Seien Sie vorsichtig, wenn Sie versuchen, dies als eine Liste von Befehlen zu behandeln (dh: 'foreach foo $ confCmds' nicht), weil es je nach dem, was in $ cmd_ts ist, fehlschlagen kann.
Eigentlich cmd_ts ich will command1, command2 und $ durch eine neue getrennt werden line, aber mit list oder concat bekomme ich sie zusammen als eine durch Leerzeichen getrennte Zeichenkette.Irgendeine Idee, wie man das erreicht, da ich eine harte Zeit tackle \ n: P –
Sie können doppelte Anführungszeichen anstelle von geschweiften Klammern in Ihrem ursprünglichen Beispiel verwenden. Solange Sie diese Daten nicht später als Tcl-Liste behandeln, werden Sie in Ordnung sein. Eine weitere Option ist die Konvertierung der gerade erstellten Tcl-Liste in eine Folge von durch Zeilenumbrüche getrennten Elementen mit [join $ confCmds \ n] –