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

Bash中通过循环创建动态命名变量的问题与解决

如何在Bash循环中创建带数字后缀的动态变量

问题场景

需要从文本文件逐行读取内容,分别赋值给naam1、naam2这类带数字后缀的变量。

首先创建测试文件naam.txt:

echo "John   " > naam.txt
echo "Susan  " >> naam.txt
echo "Nicole " >> naam.txt
echo "Betsy  " >> naam.txt

最初采用手动赋值的方式可实现需求,但变量数量较多时操作繁琐:

naam1=$(sed -n 1"p"  naam.txt)
naam2=$(sed -n 2"p"  naam.txt)
naam3=$(sed -n 3"p"  naam.txt)
naam4=$(sed -n 4"p"  naam.txt)
echo $naam1 
echo $naam3
echo $naam2
echo $naam4

失败的循环尝试

尝试用循环简化赋值,但直接使用naam$var=...的写法无法生效:

for var in 1 2 3 4 
do
    naam$var=$(sed -n $var"p"  naam.txt)
done
echo $naam1 $naam4

原因是Bash的变量解析顺序限制,左侧的naam$var不会被正确解析为动态变量名,导致赋值失败。

解决方法:使用printf -v命令

Bash的printf -v命令支持将输出结果直接赋值给指定名称的变量,可完美解决动态变量赋值问题:

num=5                                               # 需要创建的变量数量
for (( i = 1; i <= $num; i++ ))                     
do
    CONFIG_OPTION="naam$i"                          # 定义动态变量名
    CONFIG_VALUE=$(sed -n $i"p"  naam.txt)          # 从文件读取对应行的内容
    printf -v "$CONFIG_OPTION" "%s" "$CONFIG_VALUE" # 将值赋值给动态变量
done

# 生成测试文件(若未提前创建)
echo "John   " > naam.txt
echo "Susan  " >> naam.txt
echo "Nicole " >> naam.txt
echo "Betsy  " >> naam.txt
# 输出变量值验证结果
echo "1     $naam1"
echo "2     $naam2"
echo "3     $naam3"
echo "4     $naam4"
echo "5     $naam5"
echo "6     $naam6" # 未赋值的变量会输出空值

关键说明

printf -v var_name format value 会将按format格式化后的value赋值给var_name,此处用%s作为格式符,直接将读取到的文本内容赋值给动态生成的变量名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:17:24