Skip to content

SC2309: false positives for non-decimal number #3188

Open
@BenSYZ

Description

@BenSYZ

Hi, guys! I found bash could support non-decimal number, while shellcheck treats them to be warning.

example code:

if [[ 0x1 -le 0x2 ]];then
    echo true
else
    echo false
fi

from man pages of bash:

       Integer constants follow the C language definition, without suffixes or
       character constants.  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 the optional base is a decimal
       number between 2 and 64 representing the arithmetic base, and n is a
       number in that base.  If base# is omitted, then base 10 is used.  When
       specifying n, if a non-digit is required, the digits  greater  than 9
       are represented by the lowercase letters, the uppercase letters, @, and
       _, in that order.  If base is less than or equal to 36, lowercase and
       uppercase letters may be used interchangeably to represent numbers
       between 10 and 35.

so number (16) could be:

  • 0x10: (hexadecimal base)
  • 020: (octal base)
  • 13#13 (any base)
  • ...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions