BASH:如何在循环中创建动态数组名称

Pet*_*Pan 3 arrays bash dynamic

这是我尝试过的:

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
Run Code Online (Sandbox Code Playgroud)

有什么想法如何使动态数组名称起作用吗?多谢!

Sir*_*hos 5

您可以使用间接扩展:

#!/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
Run Code Online (Sandbox Code Playgroud)

请注意,这只会创建数组变量arrayaaa[0]arraybbb[1]arrayccc[2],而不是(如您所期望的)arrayaaa[0]arrayaaa[1]arrayaaa[2]arraybbb[0]arraybbb[1]arraybbb[2]arrayccc[0]arrayccc[1]arrayccc[2]

  • +1 表示不使用 eval (或者您可以使用 `typeset` 而不是 `let`)。 (2认同)