Вам понадобится eval
и отложенный символ:
$ foo_0=john
$ count=0
$ name="\$foo_$count"
$ echo $name
$foo_0
$ eval echo "$name"
john
, но если индекс действительно не важен для вас, вы можете использовать
for i in "$foo_0" "$foo_1" "$foo_2" ... ; do
...
done
и избавиться от него.из плохо названного псевдомассива.И, если у вас есть верхняя граница для числа чисел foo_x
и , в различных foos нет специальных символов (в частности, нет символа в $IFS
, который по умолчанию равен <space><tab><return>
)затем вы можете использовать функцию сжатия пустых аргументов оболочки и:
$ for i in $foo_0 $foo_1 $foo_2 ; do
> echo '***' $i
> done
*** john
и позволить оболочке игнорировать unset foo_x