Bash: double equals vs -eq
==
is a bash
-specific alias for =
, which performs a string (lexical) comparison instead of the -eq
numeric comparison. (It's backwards from Perl: the word-style operators are numeric, the symbolic ones lexical.)
To elaborate on bollovan's answer...
There is no >=
or <=
comparison operator for strings. But you could use them with the ((...))
arithmetic command to compare integers.
You can also use the other string comparison operators (==
, !=
, <
, >
, but not =
) to compare integers if you use them inside ((...))
.
Examples
- Both
[[ 01 -eq 1 ]]
and(( 01 == 1 ))
do integer comparisons. Both are true. - Both
[[ 01 == 1 ]]
and[ 01 = 1 ]
do string comparisons. Both are false. - Both
(( 01 -eq 1 ))
and(( 01 = 1 ))
will return an error.
Note: The double bracket syntax [[...]]
and the double parentheses syntax ((...))
are not supported by all shells.
If you want to do integer comparison you will better use (( )), where you can also use >= etc.
Example:
if (( $UID == 0 )); then
echo "You are root"
else
echo "You are not root"
fi