Reputation: 5759
First I should perhaps explain what I want to do...
${selected_sets[@]}
.Most of it is fine, but I am having trouble creating arrays based on the contents of ${selected_sets[@]}
... I think I have got my syntax all wrong :)
for i in ${selected_sets[@]}
do
x=1
linecount=$(cat $desired_path/$i | wc -l) #get line count of every set
while [ $x -le $linecount ]
do ${i}[${#${i}[@]}]=$x
x=$(($x+2)) # only insert odd numbers up to max limit of linecount
done
done
The problem is ${i}[${#${i}[@]}]=$x
I know that I can use array[${#array[@]}]=$x
but I don't know how to use a variable name.
Any ideas would be most welcome (I am really stumped)!!!
Upvotes: 0
Views: 2742
Reputation: 212208
In general, this type is question is solved with eval. If you want a a variable named "foo" and have a variable bar="foo", you simply do:
eval $bar=5
Bash (or any sh) treats that as if you had typed
foo=5
So you may just need to write:
eval ${i}[\${#${i}[@]}]=$x
with suitable escapes. (A useful technique is to replace 'eval' with 'echo', run the script and examine the output and make sure it looks like what you want to be evaluated.)
Upvotes: 2
Reputation: 8398
You can create named variables using the declare
command
declare -a name=${#${i}[@]}
I'm just not sure how you would then reference those variables, I don't have time to investigate that now.
Using an array:
declare -a myArray
for i in ${selected_sets[@]}
do
x=1
linecount=$(cat $desired_path/$i | wc -l) #get line count of every set
while [ $x -le $linecount ]
do
$myArray[${#${i}[@]}]=$x
let x=x+1 #This is a bit simpler!
done
done
Beware! I didn't test any of the above. HTH
Upvotes: 1