微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – Bash eval数组变量名

这是我的bash案例:

第一种情况,这就是我想用myvara做的“别名”var:

myvara="variableA"
varname="A"
eval varalias=\$"myvar"$varname
echo $varalias

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

myvara=( "variableA1" "variableA2" )
for varItem in ${myvara[@]}
do
    echo $varItem
done

现在不知怎的,我需要像示例1那样使用“别名”技术,但这次是对于数组变量:

eval varalias=\$"myvar"$varname
for varItem in ${varalias[@]}
do
    echo $varItem
done

但是对于最后一种情况,只打印myvara的第一个成员,这是eval评估变量的值,我应该怎么做var数组变量,因此eval被评估为数组变量的名称而不是变量的值.

解决方法:

参数扩展的最简单形式是:${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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐