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 чтобы получить интересующую вас строку, если вам нужна только строка с соответствующими символами.

Другие вопросы по тегам