Nir
Nir

Reputation: 2629

Can I use variable as the comparison operator?

I want to use a variable as comparison operator. Is it possible? Something like:

x=10
y=20
t="<"
res=`expr $x $y $t`

or

x=10
y=20
t="-lt"
if [ $x $y $t ]; then
    ..
fi

Whichever approach is fine by me.

Upvotes: 1

Views: 99

Answers (1)

Jorenar
Jorenar

Reputation: 2884

Why have you not just tested* it? Yes, it is possible. Shell is interpreted language. Command test (for which [ is an alias) takes arguments just as any other command. Those can be variables as well.

Example:

#!/usr/bin/env sh

x=10
y=20
t="-lt"

if [ $x $t $y ]; then
    echo "a"
fi

if [ $y $t $x ]; then
    echo "b"
else
    echo "c"
fi

t="-ge"

if [ $y $t $x ]; then
    echo "d"
fi

Output:

a
c
d

* Your example don't work, because you have operator (variable $t) after the values (variables $x and $y), not between them.

Upvotes: 2

Related Questions