Value too great for base (error token is “0925”)

后端 未结 3 703
盖世英雄少女心
盖世英雄少女心 2021-02-14 00:40

I have the following logic in my bash script:

#!/bin/bash
local_time=$(date +%H%M)

if (( ( local_time > 1430  && local_time < 2230 ) || ( local_ti         


        
3条回答
  •  伪装坚强ぢ
    2021-02-14 01:05

    bash is treating your numbers as octal because of the leading zero

    From man bash

    Constants with a leading 0 are interpreted as octal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, numbers take the form [base#]n, where base is a decimal number between 2 and 64 represent- ing the arithmetic base, and n is a number in that base. If base# is omitted, then base 10 is used.

    To fix it, specify the base-10 prefix

    #!/bin/bash
    local_time="10#$(date +%H%M)"
    
    if (( ( local_time > 1430  && local_time < 2230 ) || ( local_time > 0300 && local_time < 0430 ) )); then
     # do something
    fi
    

提交回复
热议问题