Hello,

I'm not sure whether I found a bug in Bash or in it's documentation.

The documentation suggests that the arithmetic binary operator '-eq' is
for integers ("Arg1 and arg2 may be positive or negative integers."),
but when using it with '[[ ]]' it doesn't fail on strings.

$ [[ 1 -eq 1 ]] && echo "yes" || echo "no"
yes

$ [[ "x" -eq "x" ]] && echo "yes" || echo "no"
yes

as opposed to `test':

$ test "x" -eq "x" && echo "yes" || echo "no"
test: invalid integer 'x'
no

$ [ "x" -eq "x" ] && echo "yes" || echo "no"
[: invalid integer 'x'
no

If this is expected behaviour, I think the documentation should reflect
this.

Use case: I use this to test whether a variable is an integer.

$ [ "${x}" -eq "${x}" ] 2> /dev/null && echo "yes" || echo "no"

...

Looking a bit further: it doesn't do any comparison on the given strings:

$ [[ "x" -eq "y" ]] && echo "yes" || echo "no"
yes

$ [[ "x" -eq "yz" ]] && echo "yes" || echo "no"
yes

but it does on integers:

$ [[ 1 -eq 2 ]] && echo "yes" || echo "no"
no

Kind regards,
  Rob

-- 
-- Rob la Lau
--
-- Sysadmin en webdeveloper in ruste
--
--      web : https://ohreally.nl/
--      eml : r...@ohreally.nl
--

Reply via email to