Tcl Lreplace не может заменить брекеты?
Что должен делать этот пример кода?
set l { A B C D }
lreplace $l 1 2 \[ \]
Возвращается {A {[} \] D}
Однако я хочу иметь {A [ ] D}
,
Что я делаю неправильно?
1 ответ
Решение
Ваш код делает именно то, что вы хотите, вы просто читаете строковый повтор вашего вывода и неправильно понимаете это:
% 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
Когда вы читаете строку rep, вы видите, что она экранирует [и]. Как вы можете видеть из вывода foreach, фактические значения - это то, что вы запрашиваете. Ты можешь использовать join
чтобы получить интересующую вас строку, если вам нужна только строка с соответствующими символами.