使用变量名创建数组bash,unix

时间:2011-10-14 09:37:53

标签: arrays bash shell unix dynamic

首先,我应该解释一下我想做什么......

  • 我有'n'个'n'行的文件。我所知道的只是 行数是均匀的。
  • 用户选择他们想要的文件。这被保存到了 数组名为${selected_sets[@]}
  • 程序将打印屏幕随机选择的'奇数' 来自随机选择的文件的行。
  • 打印完一行后,我不想再打印了......

大部分都很好,但我在根据${selected_sets[@]}的内容创建数组时遇到了麻烦......我想我的语法都错了:)

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

问题是${i}[${#${i}[@]}]=$x 我知道我可以使用array[${#array[@]}]=$x,但我不知道如何使用变量名。

任何想法都会受到欢迎(我真的很难过)!!!

2 个答案:

答案 0 :(得分:2)

一般来说,这种类型的问题是用eval解决的。如果你想要一个名为“foo”的变量并且有一个变量bar =“foo”,你只需要这样做:

eval $bar=5

Bash(或任何sh)将其视为您键入的内容

foo=5

所以你可能只需要写:

eval ${i}[\${#${i}[@]}]=$x

有适当的逃脱。 (一种有用的技术是用'echo'替换'eval',运行脚本并检查输出并确保它看起来像你想要评估的那样。)

答案 1 :(得分:1)

您可以使用declare命令

创建命名变量
declare -a name=${#${i}[@]}

我只是不确定你会如何引用这些变量,我现在没有时间对此进行调查。

使用数组:

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

小心!我没有测试上面的任何一个。 HTH