Em primeiro lugar, não pode haver nenhum espaço em torno de =
na declaração de variável em bash
.
Para obter o que você deseja, você pode usar eval
.
Por exemplo, um exemplo de script como o seu:
#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
eval "$name"="'$(( $i + 1 ))q;d'"
printf '%s\n' "${!name}"
i=$(( $i + 1 ))
done
Impressões:
1q;d
2q;d
3q;d
4q;d
5q;d
Use eval
cautelosamente, algumas pessoas o chamam de mal por algum motivo válido.
declare
também funcionaria:
#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
declare "$name"="$(( $i + 1 ))q;d"
printf '%s\n' "${!name}"
i=$(( $i + 1 ))
done
também imprime:
1q;d
2q;d
3q;d
4q;d
5q;d