如何在Bash中遍历变量实现批量生成文件
不用数组遍历Bash变量生成文件的方法
方法1:手动指定变量名列表(简单直接)
把你的脚本修改成下面这样,直接列出城市变量名,用间接引用获取变量值:
API="link to API" # 城市经纬度变量(注意补上原脚本里miami缺失的闭合引号) newyork="latitude-longitude" boston="latitude-longitude" miami="latitude-longitude" # 遍历每个城市变量名 for city_name in newyork boston miami; do # 间接引用:通过变量名拿到对应的值 coords="${!city_name}" # 生成对应文件名的文件 curl -s "$API$coords" > "${city_name}.txt" done
这种方式适合变量数量不多的情况,直观好维护。
方法2:自动提取城市变量(适合变量较多时)
如果城市变量很多,不想手动列,可以用declare命令筛选出目标变量,再循环处理:
API="link to API" # 城市经纬度变量 newyork="latitude-longitude" boston="latitude-longitude" miami="latitude-longitude" # 筛选出所有小写字母命名的普通变量(匹配你的城市变量格式) for city_name in $(declare -p | grep -E '^declare -- [a-z]+=' | cut -d' ' -f3 | cut -d'=' -f1); do coords="${!city_name}" curl -s "$API$coords" > "${city_name}.txt" done
注意事项
- 原脚本中
miami="latitude-longitude缺少闭合引号,一定要补上,否则脚本会报错。 - 间接引用
${!var}是Bash的特性,确保你的脚本用bash执行(不要用sh)。
内容的提问来源于stack exchange,提问作者Arawelo
相关产品推荐
相关产品推荐

