ura*_*ray 8 linux scripting bash array
这是我的 bash 案例:
第一种情况,这就是我想要做的“走样”var有myvarA:
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)
我解决了;最后一个例子应该是这样的:
eval varAlias=\${"myvar"$varname[@]}
for varItem in ${varAlias[@]}
do
echo $varItem
done
Run Code Online (Sandbox Code Playgroud)