Как получить последний символ строки в консоли?
я написал следующие строки, чтобы получить последний символ строки:
str=
i=$((${#str}-1))
echo ${str:$i:1}
Он работает abcd/:
$ bash last_ch.sh abcd/
/
Это не работает abcd*:
$ bash last_ch.sh abcd*
array.sh assign.sh date.sh dict.sh full_path.sh last_ch.sh
Это список файлов в текущей папке..
8 ответов:
Это одна из причин, почему вам нужно, чтобы цитировать ваши переменные:
echo "${str:$i:1}"в противном случае, Баш расширяет переменных и в этом случае не действуют, прежде чем распечатать. Также лучше процитировать параметр скрипту (если у вас есть соответствующее имя файла):
sh lash_ch.sh 'abcde*'Также см. Порядок расширений в справочное руководство bash. Переменные расширяются перед расширением имени файла.
Per @perreal, цитирование переменных важно, но потому, что я прочитал этот пост, как 5 раз, прежде чем найти более простой подход к вопросу под рукой в комментариях...
str='abcd/' echo "${str: -1}"выход:
/str='abcd*' echo "${str: -1}"выход:
*спасибо всем, кто участвовал в этом выше; я соответствующим образом добавил +1 по всему потоку!
Я знаю, что это очень старая нить, но никто не упомянул, какой для меня самый чистый ответ:
echo -n $str | tail -c 1Примечание
-nпросто так эхо не включает новую строку в конце.
другое решение с помощью awk script:
последний 1 знак:
echo $str | awk '{print substr(,length,1)}'последние 5 символов:
echo $str | awk '{print substr(,length-5,5)}'
каждый ответ до сих пор подразумевает слово "оболочка" в вопросе приравнивается к Bash.
вот как это можно сделать в стандартной оболочке Борна:
printf $str | tail -c 1
попробуй:
"${str:$((${#str}-1)):1}", например:
someone@mypc:~$ str="A random string*"; echo "$str" A random string* someone@mypc:~$ echo "${str:$((${#str}-1)):1}" * someone@mypc:~$ echo "${str:$((${#str}-2)):1}" g
Comments