ручка bash и начинает с ненулевым и нулевым значением в если

Мне нужно сравнить два целочисленных значения и вот условие if,

if [[ $VAL -ge 1000 ]] ; then
   #do something 
fi 

Но проблема в том, когда он пытается сравнить с целочисленным значением 010получил сообщение об ошибке

-bash: 01: value too great for base (error token is "01")

Я исправил эту проблему с помощью $VAL#0in if condition.

Но все еще получать такой же вопрос с ним пытается сравнить целочисленное значение 0010и его фиксированной С.10#${VAL}

Проблема с правильными целыми значениями, как 523и получение ниже ошибки,

[[: #10523: syntax error: operand expected (error token is "#10523")

Не уверен, как сделать оператор if работает со всеми случаями.

Обновление (Решение):

Найдено исправление.

VAL=$((10#$VAL))

Независимо от значения, это изменит его на decimal и переназначит его той же переменной.

1 ответ

  1. Я думаю, что есть что-то не совсем правильно с вашим примером. 010 не будет давать базовую ошибку, но, например, 090 будет. Это потому, что числа с начальным нулем считаются восьмиконечными.

    Чтобы задать базу вручную, добавьте к номеру префикс 10#:

    $ if [[ 100 -gt 090 ]]; then echo t; else echo f; fi
    bash: [[: 090: value too great for base (error token is "090")
    f
    
    $ if [[ 100 -gt 10#090 ]]; then echo t; else echo f; fi
    t
    

    Для вашего случая это означает, что вы должны использовать:

    if [[ "10#$VAL" -ge 1000 ]] ; then
       #do something 
    fi