假設我有以下名為“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。所以問題是,我如何單獨將每行括號內的值分配為陣列中的不同元素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
因此期望curl -X GET "https://api.cloudflare.com/client/v4/zones/a1b2c3/dns_records?運行并生成一個名為的輸出檔案test1.xyz.txt,其中包含所述鏈接的 dns 記錄。這適用于下一行,test2.xyz.txt依此類推。
uj5u.com熱心網友回復:
假設括號內的字串由字母數字字符組成,請嘗試:
#!/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 互操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/441518.html
