bash: integer expression expected
38,762
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).
Author by
Bob Ramsey
Updated on September 18, 2022Comments
-
Bob Ramsey over 1 year
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"
-
Bob Ramsey over 10 yearsif [ $tname = $name ]; then also works what difference will it make if we add inverted commas(like "$tname")
-
Gilles 'SO- stop being evil' over 10 years@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.