Поскольку вы использовали кавычки в «$ x <3», вы оцениваете это условие только один раз: в первый раз, когда его видит интерпретатор tcl, постоянно выполняя тест «0 <3».Поскольку это всегда так, вы выходите из тела цикла while только тогда, когда вы [прерываете]. </p>
, если вы используете скобки {} вместо кавычек "" для условия while, этот тест оценивается только функцией whileсам цикл, а не этапом подстановки интерпретатора tcl, и работает так, как вы ожидаете.
Правило большого пальца: всегда используйте {} в тесте if / while / for и т.д.поведение - это то, что вы ищете).