首先,我应该解释一下我想做什么......
${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
,但我不知道如何使用变量名。
任何想法都会受到欢迎(我真的很难过)!!!
答案 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