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

如何在Bash脚本中遍历数字变量,为每个关键词创建独立变量并存储到数组?

解决Bash脚本创建动态变量/数组的问题

我来帮你理顺这个脚本的逻辑!你的核心需求是根据用户输入的数量生成对应独立变量,同时也尝试用数组来管理这些关键词,咱们一步步来修正问题:

首先,解决独立变量创建的问题

你第一次写的循环有个小问题:for i in keywords_num是把字符串keywords_num当成循环对象,而不是数字范围。正确的做法是用Bash的C风格循环,搭配declare命令安全地创建动态变量:

#!/usr/bin/env bash
read -p "Enter number of keywords: " keywords_num

# 循环创建独立变量
for ((i=1; i<=keywords_num; i++)); do
    read -p "Enter keyword $i: " input
    # 用declare创建动态命名的变量,把输入值赋值给它
    declare "keyword$i=$input"
    # 实时反馈给用户
    echo "已设置 keyword$i = $input"
done

# 测试使用这些变量
echo -e "\n所有关键词变量:"
for ((i=1; i<=keywords_num; i++)); do
    # 用间接引用获取动态变量的值
    echo "keyword$i: ${!keyword$i}"
done

这个脚本运行后,当你输入数量4,就会生成keyword1到keyword4四个独立变量,每个都存储用户输入的值。

更推荐的方案:用数组管理关键词

其实在Bash里,用数组来批量管理这类同类型的变量会更方便,不需要单独维护多个命名变量,遍历和使用都更灵活。修正你之前的数组代码:

#!/usr/bin/env bash
read -p "Enter number of keywords: " keywords_num

# 初始化空数组
keywords_total=()

for ((i=1; i<=keywords_num; i++)); do
    read -p "Enter keyword $i: " input
    # 把输入值直接添加到数组末尾
    keywords_total+=("$input")
    # 实时显示当前数组内容
    echo "当前已添加的关键词:${keywords_total[@]}"
done

# 遍历数组使用关键词
echo -e "\n开始处理所有关键词:"
for keyword in "${keywords_total[@]}"; do
    echo "- 处理关键词:$keyword"
done

分析你之前代码的问题

你中间尝试的数组代码有几个小错误:

  • 变量名拼写错误:keywords_totali应该是keywords_total;
  • 循环变量引用错误:keywords$1里的$1是脚本的位置参数,不是循环里的$i,应该写成keyword$i;
  • 存储的是变量名而非值:如果你想把之前创建的keyword1这类变量的值存入数组,需要用间接引用${!keyword$i},不过直接存输入的input会更简洁高效。

你最后修正拼写后得到的数组存储的是变量名(比如keywords1),而不是变量的值,改成keywords_total+=("${!keyword$i}")就可以存值,但直接用数组存输入值的方案更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 12:27:35