Лучше всего спроектировать использование массивов вместо имен переменных, созданных вручную, поэтому ответ Байу - это то, что вы ищете.
Теперь существует способ расширения переменных, имя которых находится в другой переменной, существует. в Bash (без использования eval
) и называется косвенное расширение. Вы найдете некоторую информацию об этом в разделе Расширение параметров оболочки справочного руководства .
В вашем случае это будет выглядеть так:
for i in {1..3}; do
# You need to create an auxiliary variable with the name of the variable to expand
varname=r$i
# Then use the indirect expansion (it's prefixed with an exclamation mark)
echo "${!varname}"
done
Это считается плохой практикой, и ее следует по возможности избегать: лучше использовать массивы.
Еще один комментарий о способе создания переменных без использования eval
- использование declare
или printf
. Вот как это происходит с printf
:
for i in {1..3}; do
printf -v "r$i" "%d" "$((RANDOM % 10))"
done