如何在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
相关产品推荐
相关产品推荐

