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

Shell脚本中使用for循环创建动态变量的取值问题

解决Shell中动态变量的读取问题

问题原因

  • 执行echo $(name$i)时,Shell会把name$i(比如name0)当作命令去执行,而非读取变量,因此报错name0: command not found。
  • 执行echo "$name$i"时,Shell会优先解析$name(你未定义这个变量,值为空),再拼接$i的数值,最终输出空字符串加数字,而非目标变量name$i的值。

解决方案

方法1:使用Bash间接引用(推荐)

通过构造变量名字符串,再用${!变量名}的语法间接读取变量值,安全性更高:

function student() {
    for (( i=0; i < 5; i++ )); do
        # 构造变量名字符串,比如i=0时var值为name0
        var="name$i"
        # 间接引用变量,等价于echo $name0
        echo "${!var}"
    done
}

方法2:使用eval命令

eval会让Shell重新解析命令,将动态构造的变量名解析为真实变量:

function student() {
    for (( i=0; i < 5; i++ )); do
        # 转义$name的$,避免Shell提前解析$name为空
        eval "echo \$name$i"
    done
}

补充说明

你的输入函数是正确的,read name$i确实会创建name0到name4这些独立变量,变量赋值没有问题。

内容的提问来源于stack exchange,提问作者Muhammad Arslan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:21:49