我正在编写一个bash脚本,我需要在for循环中创建数组,并在每次迭代时使用计数器中包含的字符串(数组元素)命名每个数组。
以下是代码:
myArray=( joe bob dave mark )
for i in "${myArray[@]}"
do
"$k_array"=( `cat fileUsedToPopulate.txt` )
done
# echo to test if one of the arrays has been created and populated
for j in "${joe_array[@]}"
do
echo $j
done
所需的结果是4个数组,joe_array bob_array等,每个数组都填充了该文件。
但是我还是没有找到逃避$ k的东西,以便在声明/填充它时附加到数组名称。
以下是我遇到的错误:
第30行:意外令牌`cat fileUsedToPopulate.txt
附近的语法错误'
第30行:"$k_array"=(
cat $ DIR / $ braDir / oem.txt`)'
感谢您提供的任何帮助。
答案 0 :(得分:2)
使用eval分配名称取决于另一个变量的变量:
val=$(cat fileUsedToPopulate.txt)
for k in "${myArray[@]}"
do
eval "${k}_array"="\"${val}\""
done
请注意,如果文件的内容包含空格或其他分隔符,则需要嵌套双引号(正确转义)。否则shell将把它的一部分解释为执行命令。此外,您需要在$k
中围绕变量名称使用大括号,否则shell将查找变量名称k_array
。