I've been trying to do something for a couple of days, and I'm stumped; I keep running into the same problem, no matter how I approach this. I have a text file with 2 columns in it; the first is the variable name, the second is the command to be run, with the output being assigned to the variable in the first column. I use read
to assign both columns to their own variables, then put the full expression into a new variable and execute it. No matter how I do it, I always get the expression as a command name and the error "command not found."
That's all a little convoluted, so let me show you. The script is:
while read varName varCmd
do
echo varName is $varName
echo varCmd is $varCmd
declare cmd=$varName=$varCmd
echo Command is $cmd
"$cmd"
echo 1st Value is $varFoo
echo 2nd Value is $varBar
done < testvars.txt
And the text file is:
varFoo echo foo
varBar echo bar
Everything works except the assignment execution itself. Here's what I get:
varName is varFoo
varCmd is echo foo
Command is varFoo=echo foo
./testvars.sh: line 8: varFoo=echo foo: command not found
1st Value is
2nd Value is
varName is varBar
varCmd is echo bar
Command is varBar=echo bar
./testvars.sh: line 8: varBar=echo bar: command not found
1st Value is
2nd Value is
It looks like Bash is interpreting the whole thing as one command name (string) and not interpreting the =
as an operator.
What can I do to get Bash to correctly interpret the assignment expression correctly?