команда tree в сценарии оболочки не добавляет слеши для каталогов

Мы можем воспользоваться тем фактом, что кодовая точка UNICODE персидских цифр последовательна и упорядочена от 0 до 9 :

$ printf '%b' '\U06F'{0..9}
۰۱۲۳۴۵۶۷۸۹

Это означает, что последняя шестнадцатеричная цифра ЯВЛЯЕТСЯ десятичным значением:

$ echo $(( $(printf '%d' "'۲") & 0xF ))
2

Это делает этот простой цикл инструментом преобразования:

#!/bin/bash
(   ### Use a locale that use UTF-8 to make the script more reliable.
    ### Maybe something like LC_ALL=fa_IR.UTF-8 for you?.
    LC_ALL=en_US.UTF-8
    a="$1"
    while (( ${#a} > 0 )); do
        # extract the last hex digit from the UNICODE code point
        # of the first character in the string "$a":
        printf '%d' $(( $(printf '%d' "'$a") & 15 ))
        a=${a#?}    ## Remove one character from $a
    done
)
echo

Использование его как:

$ sefr.sh ۰۱۲۳۴۵۶۷۸۹
0123456789

$ sefr.sh ۲۰۱
201

$ sefr.sh ۲۱
21

Обратите внимание, что этот код также может преобразовывать арабские и латинские числа (даже если они смешаны ):

$ sefr.sh ۴4٤۵5٥۶6٦۷7٧۸8٨۹9٩
444555666777888999

$ sefr.sh ٤٧0٠٦7١٣3٥۶٦۷
4700671335667

3
02.03.2016, 05:56
0 ответов

Теги

Похожие вопросы