Tcl Lreplace не может заменить брекеты? - PullRequest
0 голосов
/ 22 февраля 2012

Что должен делать этот пример кода?

set l { A B C D }
lreplace $l 1 2 \[ \]

Возвращает {A {[} \] D}, однако я хочу получить {A [ ] D}.

Что я делаю не так?

1 Ответ

4 голосов
/ 22 февраля 2012

Ваш код делает именно то, что вы хотите, вы просто читаете строковый повтор своего вывода и неправильно понимаете его:

% set l { A B C D }
 A B C D 
% foreach elem $l { puts $elem }
A
B
C
D
% set j [lreplace $l 1 2 \[ \]]
A {[} \] D
% foreach elem $j { puts $elem }
A
[
]
D
% join $j
A [ ] D

Когда вы читаете строковый повтор, вы видите, что он экранирует[и].Как вы можете видеть из вывода foreach, фактические значения - это то, что вы запрашиваете.Вы можете использовать join, чтобы получить интересующую вас строку, если вам нужна только строка с соответствующими символами.

...