read -p "Continue? [y/n] " var [ "$var" -eq "n" ] && exit 1
#read -p "Continue? [y/n] " var [ "$var" = "n" ] && exit 1
ShellCheck found a string used as an argument to a numerical operator like
-ge. Such strings will be treated as arithmetic expressions, meaning
n will refer to a variable
24/12 will be evaluated into
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
$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.