Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

BASH: how to create a dynamic array name in a loop

here's what I tried:

n=0
for i in aaa bbb ccc; do
  array${i}[$n]=$(date "+%N")
  ((++n))
done
n=0
for i in aaa bbb ccc; do
  echo ${array${i}[$n]}
  ((++n))
done

any ideas how to make the dynamic array name work? thanks a lot!

like image 292
Peter Pan Avatar asked Aug 22 '26 11:08

Peter Pan


2 Answers

You can use indirect expansion:

#!/bin/bash

# create the arrays
n=0
for i in aaa bbb ccc; do
    let array$i[$n]=$(date "+%N")
    ((++n))
done

# display what we did
n=0
for i in aaa bbb ccc; do
    var=array$i[$n]
    echo ${!var}
    ((++n))
done

Note that this will only create array variables arrayaaa[0], arraybbb[1] and arrayccc[2], and not (as you might expect) arrayaaa[0], arrayaaa[1], arrayaaa[2], arraybbb[0], arraybbb[1], arraybbb[2], arrayccc[0], arrayccc[1], and arrayccc[2].

like image 105
Sir Athos Avatar answered Aug 25 '26 00:08

Sir Athos


Take refuge of eval:

n=0
for i in aaa bbb ccc; do
  eval "array${i}[$n]=$(date "+%N")"
  ((++n))
done
like image 41
anubhava Avatar answered Aug 25 '26 02:08

anubhava



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!