簡體   English   中英

在 bash 中使用聲明性數組從文件中分配數組中的特定值

[英]Assigning specific values in array from file using declarative array in bash

假設我有以下名為“test”的文件

其中包含:

[a1b2c3]=test1.xyz
[d4e5f6]=test2.xyz
[g7h8i9]=test3.xyz
...

大約有 30 行長。 我想分配

a1b2c3
d4e5f6
g7h8i9

進入一個名為數組的數組我該怎么做?

使用 bash 3.1 這將是我的嘗試

declare -a array
while read -r line;
do
    array+=("$(echo "$line")")
done < test

但似乎我需要將我的 bash 升級到 4 或 5 以用於聲明性 arrays。所以問題是,我如何單獨單獨獲取每行括號內的值以分配為數組array中的不同元素

該數組值將在 curl 腳本中使用,該腳本應生成一個文件,其中包含與其關聯的值的名稱。

for i in "${array[@]}"
    do
    curl -X GET "https://api.cloudflare.com/client/v4/zones/$i/dns_records?" \
        -H "X-Auth-Email: $X-Auth-Email" \
        -H "X-Auth-Key: X-Auth-Key" \
        -H "Content-Type: application/json" \
        -o "${array[@]}.txt"
    done

所以期望是test1.xyz.txt curl -X GET "https://api.cloudflare.com/client/v4/zones/a1b2c3/dns_records?上述鏈接的下一行和test2.xyz.txt等等。

假設括號內的字符串由字母數字字符組成,請嘗試:

#!/bin/bash

while IFS== read -r name val; do
    name=${name#[}                      # remove left square bracket
    name=${name%]}                      # remove right square bracket
    printf -v "var_$name" %s "$val"     # assign e.g. var_a1b2c3 to test1.xyz
done < test

for var in "${!var_@}"; do
    name=${var#var_}                    # retrieve e.g. a1b2c3 by removing var_
    curl -X GET "https://api.cloudflare.com/client/v4/zones/$name/dns_records?" \
    -H "X-Auth-Email: $X-Auth-Email" \
    -H "X-Auth-Key: X-Auth-Key" \
    -H "Content-Type: application/json" \
    -o "${!var}.txt"
done
  • 作為間接變量賦值, printf -v varname value有效。
  • 作為間接變量引用, "${!var_@}"被擴展為以var_開頭的變量名列表。
  • ${!var}是指變量名由“$var”表示的值。

使用 bash-3.2.57 測試。 希望它能與 bash-3.1 互操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM