You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Escape \< to prevent it redirecting (or switch to [[ .. ]]).
Problematic code:
if [ "aardvark"<"zebra" ]
thenecho"Alphabetical!"fi
Correct code:
if [ "aardvark"\<"zebra" ]
thenecho"Alphabetical!"fi
or optionally in Bash/Ksh:
if [[ "aardvark"<"zebra" ]]
thenecho"Alphabetical!"fi
Rationale:
You are using the operator < or > in a [ test expression.
In this context, it will be considered a file redirection operator instead, so [ "aardvark" < "zebra" ] is equivalent to [ "aardvark" ] < ./zebra, which is true if there exists a readable file zebra in the current directory.
If you wanted to compare two strings lexicographically (alphabetically), escape the < or > with a backslash as in the correct example.
If you want to compare two numbers numerically, use -lt or -ge instead.
Exceptions:
None.
Related resources:
Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!