Для того, как "с помощью моей переменной $ pos я могу заменить кеш '_' на прочитанную букву" try:
for p in $pos ; do
cache=${cache:0:p}${letter}${cache:p+1}
done
Из некоторых комментариев видно, что могут возникнуть проблемы при создании списка pos
,Этот код должен делать это надежно:
pos=
for ((i=0; i<${#word}; i++)) ; do
[[ ${word:i:1} == "$letter" ]] && pos+=" $i"
done
Значение pos
будет иметь начальный пробел, если оно не пустое, но это не должно вызывать никаких проблем.Было бы лучше использовать массив для pos
, но это потребовало бы изменений в другом месте кода.
Можно установить letter
в cache
в тех же позициях, что и в word
без сохранения позиций вообще:
ncache=
for ((i=0; i<${#word}; i++)) ; do
[[ ${word:i:1} == "$letter" ]] && ncache+=$letter || ncache+=${cache:i:1}
done
cache=$ncache