[[ $var =~ ^-?[0-9]+$ ]]
- The
^
indicates the beginning of the input pattern - The
-
is a literal “-“ - The
?
means “0 or 1 of the preceding (-
)” - The
+
means “1 or more of the preceding ([0-9]
)” - The
$
indicates the end of the input pattern
So the regex matches an optional -
(for the case of negative numbers), followed by one or more decimal digits.
References: