首页 > 解决方案 > 使用数组键的名称保存文件

问题描述

我有一个下载文件的脚本。链接由两部分组成:一个在 cur(稳定的)中,第二个在关联数组中。所以我想要一个脚本来下载文件并给我一个名字,就像我的 arrey 中的钥匙一样

declare -A metricssArray
metricssArray[key1]=some link
metricssArray[key2]=some link

curl --location --request GET 'First part of link'+${metricssArray[key1]} --output example.csv

我知道这会给出一个文件名“example.csv”

 -output examle.csv

但我需要一个名为 key1.csv 的文件作为数组中的密钥

curl --location --request GET 'First part of link'+${metricssArray[key1]} --output example.csv

当我在 curl 中更改 ${metricssArray[key2]} 或 key3 时,应该使用 key2.csv 名称下载文件

或者也许我要下载所有这些,我需要了解文件属于链接/数组键

for key in "${!metricssArray[@]}"; do
    # ........^..............^ iterates over the keys
    curl --location \
         --request GET \
         --output "$key".csv \
         -u name:password \
         'firs part of the link'+${metricssArray[$@]}
         
done

我试图将 -u 放在链接之后,但我得到一个文件并在 403 状态码内(

标签: bashcurl

解决方案


我不完全确定问题是什么。

如果您询问如何迭代关联数组,您可以这样做:

declare -A metricssArray
metricssArray[key1]=some link
metricssArray[key2]=some link

for key in "${!metricssArray[@]}"; do
    # ........^..............^ iterates over the keys
    curl --location \
         --request GET \
         --output "$key".csv \
         'First part of link'+${metricssArray[$key]} 
done

要构建 URL,您可能需要:

# the array notation does not require line continuations
curl_opts=(
    --location
    --request GET
    --user "username:password"
)

url_root=http://example.com/start/of/path

for key in "${!metricssArray[@]}"; do
    url="${url_root}/${metricssArray[$key]}"
    curl "${curl_opts[@]}" --output "$key".csv "$url"
done

推荐阅读