Это одна из причин, по которой вам нужно указывать переменные в кавычках:
echo "${str:$i:1}"
В противном случае bash расширяет переменную и в этом случае выполняет подстановку перед выводом на печать. Также лучше указать параметр скрипта в кавычках (если у вас есть совпадающее имя файла):
sh lash_ch.sh 'abcde*'
Также см. Порядок расширений в справочном руководстве по bash . Переменные раскрываются перед расширением имени файла.
Чтобы получить последний символ, вы должны просто использовать его -1
как индекс, так как отрицательные индексы отсчитываются от конца строки:
echo "${str: -1}"
Пробел после двоеточия ( :
) НЕОБХОДИМ.
Такой подход не будет работать без места.
"${1: -1}"
что достаточно.