Bash eval 数组变量名

ura*_*ray 8 linux scripting bash array

这是我的 bash 案例:

第一种情况,这就是我想要做的“走样”varmyvarA

myvarA="variableA"
varname="A"
eval varAlias=\$"myvar"$varname
echo $varAlias
Run Code Online (Sandbox Code Playgroud)

数组变量和循环其成员的第二种情况,这是微不足道的:

myvarA=( "variableA1" "variableA2" )
for varItem in ${myvarA[@]}
do
    echo $varItem
done
Run Code Online (Sandbox Code Playgroud)

现在不知何故我需要使用“别名”技术,如示例 1,但这次用于数组变量:

eval varAlias=\$"myvar"$varname
for varItem in ${varAlias[@]}
do
    echo $varItem
done
Run Code Online (Sandbox Code Playgroud)

但是对于最后一种情况,只myvarA打印了第一个成员,即eval评估变量的值,我应该如何做 var array variable 所以eval评估的是数组变量名称而不是变量

小智 8

参数扩展的最简单形式是:${parameter}.
在混淆的情况下使用大括号是更好的方法。

考虑到在“myvarA”数组中包含空格的可能性,我认为这就是答案。

#!/bin/bash -x
myvarA=( "variable  A1" "variable  A2" )
varname="A"

eval varAlias=( '"${myvar'${varname}'[@]}"' )
eval varAlias=( \"\${myvar${varname}[@]}\" ) # both works
for varItem in "${varAlias[@]}" # double quote and `@' is needed
do
    echo "$varItem"
done
Run Code Online (Sandbox Code Playgroud)


ura*_*ray 2

我解决了;最后一个例子应该是这样的:

eval varAlias=\${"myvar"$varname[@]}
for varItem in ${varAlias[@]}
do
    echo $varItem
done
Run Code Online (Sandbox Code Playgroud)