Unix Shell脚本变量赋值报错:动态命名变量赋值失败求助
Bash动态变量赋值的正确方法
你的代码执行报错是因为A$n='$i'会被Shell先展开为A2='hello',但Shell把这行当作要执行的命令而非变量赋值操作,因此抛出"A2=hello: command not found"的错误。
以下是几种实现动态变量命名赋值的正确方式:
使用
eval命令:n=2 i='hello' eval "A$n='$i'" # 验证:执行 echo $A2 会输出 helloeval会将构造后的字符串当作Shell命令执行,这里先展开A$n为A2,再执行A2='hello'的赋值操作。使用
declare命令:n=2 i='hello' declare "A$n=$i" # 验证:执行 echo $A2 会输出 hellodeclare支持动态构造变量名,直接完成赋值操作,写法更简洁安全。Bash 4.3+版本可使用名称引用(nameref):
n=2 varname="A$n" declare -n ref=$varname ref='hello' unset -n ref # 解除引用,避免后续误操作 # 验证:执行 echo $A2 会输出 hello通过
declare -n将ref设为varname指向变量的引用,给ref赋值等价于给A2赋值。
内容的提问来源于stack exchange,提问作者Harish H B
相关产品推荐
相关产品推荐

