这已被多次询问,但没有一种方法有效。我想使用从变量中获取的数组名称动态创建数组。所以现在让我们从一个数组开始:
#!/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
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)
您还可以使用declare
或typeset
代替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)