You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 会输出 hello
    

    eval会将构造后的字符串当作Shell命令执行,这里先展开A$n为A2,再执行A2='hello'的赋值操作。

  • 使用declare命令:

    n=2
    i='hello'
    declare "A$n=$i"
    # 验证:执行 echo $A2 会输出 hello
    

    declare支持动态构造变量名,直接完成赋值操作,写法更简洁安全。

  • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:05:32