\<
is undefined.#!/bin/sh
x="aardvark"
y="zebra"
if [ $x \< $y ]
then
echo "$x comes before $y in the dictionary"
fi
First, make sure you wanted a lexicographical comparison (aka dictionary order), and not a numerical comparison.
Then to compare as string, you can use expr
and make
sure that the strings are not interpreted numerically by adding some
non-numerical data to them. Here, an apostrophe is prepended:
#!/bin/sh
x="aardvark"
y="zebra"
if expr "'$x" \< "'$y" > /dev/null
then
echo "$x comes before $y in the dictionary"
fi
The test
binary operators >
,
\>
, <
, and \<
are not
part of POSIX and not guaranteed to be supported in scripts targeting
sh
.
The expr
functionality is specified by POSIX.
If you know your sh
will be e.g. dash
,
consider explicitly using #!/bin/dash
.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.