Reputation: 137
I want to put quotation marks around my variable if it's not empty. So I got this in a for loop and want an else statement that put $var in quotation marks if I want to Echo it out later on. How goes the syntax?
for var in var1 var2 var3 var4; do
eval 'val=$'"$var"
if [ -z "$val" ]; then
eval "${var}=null"
fi
done
Upvotes: 1
Views: 91
Reputation: 531135
You don't need eval
here at all. Instead, use indirect parameter expansion and the :=
parameter expansion operator.
# Works in 4.4, but not in earlier versions
for var in var1 var2 var3 var4; do
: ${!var:=null}
done
However, I'd find a list of repeated assignments easier to read and maintain (as well as being POSIX-compliant).
: ${var1:=null}
: ${var2:=null}
: ${var3:=null}
: ${var4:=null}
Having forgotten about the quotes, I'd fall back to using printf
to handle the dynamic assignments.
for var in var1 var2 var3 var4; do
oldVal="${!var}"
if [ -z "$oldVal" ]; then
newVal=null
else
newVal=\"$oldVal\"
fi
printf -v "$var" '%s' "$newVal"
done
printf -v
is safer than eval
, but it's a bash
extension. Continue using eval "$var=..."
(with all the dangers that entails) if you need POSIX compatibility.
Upvotes: 1