[英]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.