Предполагая исправленный синтаксис в то время, как предлагал downtheroad ( нужен пробел после [и до]), а также , пропуская " в tt=${tt#"?}
(опущенная версия - это то, что вы цитируете).
Также тест в состоянии while должен соответствовать пустой строке ''
, в противном случае цикл не завершается.
tt=${tt#?}
отрубает первый символ из строки .
См. эту тестовую программу (я добавил 2 эха и парены, чтобы иметь возможность видеть точное содержимое tt в цикле до и после прерывания:
tt=03
while [ "$tt" != '' ]
do
echo "A: (tt=$tt)"
tt=${tt#?}
echo "B: (tt=$tt)"
done
echo $tt
дает этот результат (обратите внимание на пустую последнюю строку из последнего эха):
A: (tt=03)
B: (tt=3)
A: (tt=3)
B: (tt=)