我有這個想法:
我有這個號碼:CN=20
和一個串列=(“xa1-”“xa2-”“xb1-”“xb2-”)
這是我的腳本:
for a in "${list[@]}"; do
let "CN=$(($CN 1))"
echo $CN
Output:
21
22
23
24
我正在嘗試創建一個回圈,它會在其中創建以下變數,稍后將在我的腳本中參考這些變數:
fxp0_$CN="fxp-$a$CN"
fxp0_21="fxp-xa1-21"
fxp0_22="fxp-xa2-22"
fxp0_23="fxp-xb1-23"
fxp0_24="fxp-xb2-24"
但是,我無法找到在回圈中更改變數名稱的方法。相反,我正在嘗試自己,但在嘗試更改變數名時出現此錯誤:
腳本/srx_file_check.sh:第 317 行:fxp0_21=fxp0-xa2-21:找不到命令
uj5u.com熱心網友回復:
玩了一圈后,我找到了解決方案!
for a in "${list[@]}"; do
let "CN=$(($CN 1))"
fxp_int="fxp0-$a$CN"
eval "fxp0_$CN=${fxp_int}"
done
echo $fxp0_21
echo $fxp0_22
echo $fxp0_23
echo $fxp0_24
echo $fxp0_25
echo $fxp0_26
echo $fxp0_27
echo $fxp0_28
輸出:
fxp0-xa1-21
fxp0-xa2-22
fxp0-xb1-23
fxp0-xb2-24
fxp0-xc1-25
fxp0-xc2-26
fxp0-xd1-27
fxp0-xd2-28
uj5u.com熱心網友回復:
維護動態生成的變數集的一種常用方法是通過陣列。
當變數名稱的拼寫不同時,關聯陣列就派上用場了,其中變數“名稱”充當陣列索引。
在這種情況下,由于變數名稱中唯一改變的是數字,我們可以使用普通(數字索引)陣列,例如:
CN=20
list=("xa1-" "xa2-" "xb1-" "xb2-")
declare -a fxp0=()
for a in "${list[@]}"
do
(( CN ))
fxp0[${CN}]="fxp-${a}${CN}"
done
這會產生:
$ declare -p fxp0
declare -a fxp0=([21]="fxp-xa1-21" [22]="fxp-xa2-22" [23]="fxp-xb1-23" [24]="fxp-xb2-24")
$ for i in "${!fxp0[@]}"; do echo "fxp0[$i] = ${fxp0[$i]}"; done
fxp0[21] = fxp-xa1-21
fxp0[22] = fxp-xa2-22
fxp0[23] = fxp-xb1-23
fxp0[24] = fxp-xb2-24
uj5u.com熱心網友回復:
作為一般規則,我可以告訴您,在回圈中修改變數的名稱不是一個好主意。
但是,有一種方法可以使用該source命令執行類似的操作,如本 URL 中的一些示例所解釋的那樣。歸根結底是您將檔案視為一段源代碼。
祝你好運
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/468587.html
上一篇:回圈查詢直到找到結果
下一篇:回圈遍歷csv行并放入代碼中
