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. Статья про
printf
2. Описание оператора
expr
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/06/04/bash-p