read -p "Continue? [y/n] " var
[ "$var" -eq "n" ] && exit 1#read -p "Continue? [y/n] " var
[ "$var" = "n" ] && exit 1ShellCheck found a string used as an argument to a numerical operator
like -eq, -ne, -lt,
-ge. Such strings will be treated as arithmetic
expressions, meaning n will refer to a variable
$n, and 24/12 will be evaluated into
2.
In the problematic example, the intention was instead to compare
"n" as a string, so it should use the equivalent string
operator instead, in this case =.
It is perfectly valid to use variables as operands. ShellCheck will not flag any value that is an unquoted variable name assigned in the script:
a=42; [[ "a" -eq 0 ]] # Flagged due to quotes
[[ b -eq 0 ]] # Flagged due to not being assigned
c=42; [[ c -eq 0 ]] # Not flagged
However, ShellCheck does not know whether you intended
foo/bar to be division or a file path.
If you intended to divide $foo and $bar,
you can either make it explicit with
[[ $((foo/bar)) -ge 0 ]], or simply ignore the warning.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.