BASH: Получить номер буквы в латинском алфавите, более элегантное решение.
В комментариях предложили более элегантное решение этой задачки.#!/bin/bash
code=`printf '%d' \'$1`
a_code=`printf '%d' \'a`
answer=$( expr $code - $a_code )
echo $answer
1.
printf - команда, выводящая текст (обычно на экран), с учетом заданной форматирующей строки. Подробнее о команде printf можно почитать в источниках, а вообще башевский printf, является аналогом printf из C++, и ее рекомендуют для замены древней команды echo в bash-скриптах.Первым параметром является строка, описывающая формат, в данном случае
'%d' означает, что нужно вывести десятичное число.Второй параметр - выводимая строка.
Перед вторым параметром добавляется символ ' (одна одинарная кавычка): Интерпретируется как кодовый номер этой буквы в текущей кодировке [1], одинарную кавычку экранируем символом
\.Таким образом, в переменной
code окажется код первого символа из первого параметра командной строки скрипта.2. Далее, таким же образом, получаем код первой буквы в алфавите.
3. В итоге, получаем номер буквы в алфавите, посчитав выражение с помощью оператора
expr [2]1. Этот код не будет работать на некоторых довольно странных устройствах, где кодовая таблица латинского алфавита представляет собой перемежающиеся заглавные и строчные буквы: AaBbCcDd и т.д. (или aAbBcCdD...)
2. Чтобы отсчет букв шел с единицы, необходимо изменить выражение
answer=$( expr $code - $a_code ) на answer=$( expr $code - $a_code + 1 )3. С кириллицей этот способ не сработает, используйте предыдущий
По вкусу можно добавить проверки, как в предыдущем скрипте.
На GitHub
На PasteBin
1. Статья про
printf2. Описание оператора
exprЭто репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/06/04/bash-p