Просто используйте для строки, разделенной запятыми, продолжайте добавлять индекс ваших файлов к переменной и распечатывайте переменную
for((i=1; i<=30; i++))
do
name="File${i}.exe"; [[ ! -e "$name" ]] && files="$files$i,"
done
echo $files | sed s/,$//
Или вы можете сохранить значения в массиве/списке
arr=()
for((i=1; i<=30; i++))
do
name="File${i}.exe"; [[ ! -e "$name" ]] && arr+=($i)
done
(IFS=, ; echo "${arr[*]}") #to print the array with comma as separator
Необходимо расширить управляющие последовательности обратной косой черты в соответствующем аргументе. Как сказано в здесь:
\c Terminate output similarly to the \c escape used by echo -e. printf produces no additional output after coming across a \c escape in a %b argument.
$ printf "%b\n" "ABC\chi"
ABC