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

求助:如何在ksh中通过循环递增变量名并输出变量值

在ksh中通过变量名递增循环输出值的解决方法

方法1:使用eval实现间接变量引用

eval可以动态解析变量名,适配所有版本的ksh:

#!/bin/ksh
var1="Hi" var2="world"
i=1
while true; do
    # 检查当前编号的变量是否存在
    if eval "[[ -z \${var$i} ]]"; then
        break
    fi
    # 动态输出对应变量的值
    eval "echo \${var$i}"
    ((i++))
done

方法2:利用ksh93的间接引用特性

如果你的环境是ksh93,用${!变量名}的语法更简洁,无需依赖eval:

#!/bin/ksh
var1="Hi" var2="world"
i=1
while true; do
    # 拼接出当前要访问的变量名
    varname="var$i"
    # 检查变量是否存在
    if [[ -z ${!varname} ]]; then
        break
    fi
    # 输出变量值
    echo ${!varname}
    ((i++))
done

为什么你的写法不生效?

  • $var$i会被shell先解析$var(你未定义这个变量,结果为空),再拼接$i的值,最终输出的是1、2这类数字,而非var1、var2的实际值。
  • ${var[i]}是数组元素的访问语法,但你并没有定义数组var,而是单独定义了var1、var2两个独立变量,因此这个写法无法生效。

更推荐的实现方式:使用数组

如果可以调整变量定义方式,直接用数组会更直观易维护,完全不需要处理变量名递增的问题:

#!/bin/ksh
# 定义数组
var=("Hi" "world")
# 遍历数组输出所有元素
for val in "${var[@]}"; do
    echo "$val"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:36:38