Как проверить, является ли переменная целым числом (, чтобы избежать проблем с пробелами вокруг )в сценарии оболочки POSIX?

Вы можете использовать stringsс минимальной длиной, скажем, в пять символов

strings -w -n5 corrupted.txt
9
12.07.2020, 08:13
1 ответ
#!/bin/sh
is_integer ()
{
    case "${1#[+-]}" in
        (*[!0123456789]*) return 1 ;;
        ('')              return 1 ;;
        (*)               return 0 ;;
    esac
}

Используются только встроенные функции POSIX. Из спецификации неясно, должно ли +1быть целым числом, если нет, то удалите +из строки case.

Это работает следующим образом. ${1#[+-]}удаляет необязательный ведущий знак. Если у вас осталось что-то, содержащее не цифру, то это не целое число, точно так же, если у вас ничего не осталось. Если это не не целое число, то это целое число.

Редактировать :заменить ^ на ! чтобы отменить класс символов -спасибо @LinuxSecurityFreak

13
18.03.2021, 23:20

Теги

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