使用变量作为数组名称在bash中动态创建数组

mes*_*600 3 bash array

这已被多次询问,但没有一种方法有效。我想使用从变量中获取的数组名称动态创建数组。所以现在让我们从一个数组开始:

#!/bin/bash
i="aaa"
eval ${i}=("1")
Run Code Online (Sandbox Code Playgroud)

结果是

./1.sh: line 3: syntax error near unexpected token `('
./1.sh: line 3: `eval ${i}=("1")'
Run Code Online (Sandbox Code Playgroud)

相同的结果:

$(eval ${i})=('1')
$(eval echo ${i})=('1')
$(eval "echo ${i}")=('1')
Run Code Online (Sandbox Code Playgroud)

我不想评估所有内容,只评估数组名称。如果可能的话,我想完全避免使用 eval

cho*_*oba 7

eval需要一个字符串作为参数。不能使用(unquoted,它在 shell 中具有特殊含义。

i=aaa
eval "$i=(1 2)"  # Use a string, $i will expand in double quotes.
echo ${aaa[1]})
Run Code Online (Sandbox Code Playgroud)

您还可以使用declaretypeset代替eval

declare -a $i='(1 2)'
Run Code Online (Sandbox Code Playgroud)

您仍然需要引用括号和空格。

为了eval完全避免,可以一一赋值:

#! /bin/bash
name=aaa
values=(1 2)
for ((i=0; i<${#values[@]}; ++i)) ; do
    read "$name[$i]" <<< "${values[i]}"
done
echo ${aaa[1]})
Run Code Online (Sandbox Code Playgroud)