6

I have a file out.csv I have to check if the name inputed by user exists in the file(comma separated) or not. I am taking name using read but while checking for equality I am getting error

    IFS=","
    while read tname tnum
        do
            if [ $tname -eq $name ]; then
                flag=1
                break
            fi
        done < out.csv
    echo "$ch"

1 Answer 1

14

You're getting this error since you are trying to compare string using equality operators intended for integers, -eq, -ne, -gt, and similar are integer functions.

To compare strings use = to compare for equality OR != to compare for non-equality.

Check this for more on comparison operators.

if [ $tname -eq $name ]; then

should be changed to:

if [ "$tname" = "$name" ]; then

(also remember to quote your variables).

2
  • if [ $tname = $name ]; then also works what difference will it make if we add inverted commas(like "$tname") Sep 8, 2013 at 10:38
  • 2
    @user2179293 Without quotes, the value of each variable is interpreted as a whitespace-separated list of glob patterns. With double quotes, the value of each variable is interpreted as a string. If you don't understand this, keep it simple: always put double quotes around variable substitutions, i.e. [ "$tname" = "$name" ]. Leave off the quotes only if you've read When is double-quoting necessary? and remember all the rules and hate the next person who will maintain that script. Sep 8, 2013 at 23:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .