Dynamic variable assignment

My Code :
--------------------------------------------

#!/bin/bash

for i in `echo server1 server2`
do
eval ${i}_name = "apache"
echo ${i}_name
done

--------------------------------------------

Current output :

>./test.sh
./test.sh: line 5: server1_name: command not found
server1_name
./test.sh: line 5: server2_name: command not found
server2_name

--------------------------------------------

Expected output :

apache
apache

--------------------------------------------

Basically, I need to have variable name depending on arguments passed in for loop etc.
Please assist.

Try :

#!/bin/bash

for i in server1 server2
do
	eval ${i}_name="apache"
	eval echo \$${i}_name
done
$ bash tester
apache
apache
1 Like

Since you are using bash, you might as well use arrays.

server_name=( apache apache )
echo "${server_name[0]}"
echo "${server_name[1]}"

Another method:

#!/bin/bash
for i in server1 server2
do
   var=${i}_name
   printf -v $var "%s" "apache"
   echo ${!var}
done