Есть хороший ответ, чтобы получить последний символ строки

str='abcd/'
echo "${str: -1}"

Как получить предпоследний, т.е. вернуть 'd' вместо '/'

1
bakalolo 3 Янв 2018 в 07:43

2 ответа

Лучший ответ

Используйте оператор двоеточия

str='abcd/'
echo "${str: -2:-1}"

Возвращает 'd'

1
bakalolo 3 Янв 2018 в 04:53

Как вы уже знаете, отрицательные позиции относятся к концу строки, поэтому -1 начинается с последнего символа, -2 начинается с предпоследнего символа, а так далее.

Однако используемая вами форма является упрощенной формой взятия подстроки, она принимает все символы от указанной позиции до конца строки.

Вы также можете указать явную длину, чтобы получить ограниченное количество символов, начиная с позиции, поэтому для получения второго последнего символа все, что вам нужно, это:

${str: -2:1}

Соответствующие фрагменты документации bash:

${parameter:offset}
${parameter:offset:length}

Расширение подстроки. Расширяется до length символов значения параметра, начиная с символа, указанного в offset.

Если length опущено, расширяется до подстроки значения параметра, начиная с символа, указанного в offset, и до конца значения.

4
paxdiablo 3 Янв 2018 в 06:01