[英]BASH Changing Array element into Variable
我正在嘗試從數組元素創建變量,並在源文件中檢查我創建的變量的值。
MySourceFile:
value1abc="10"
value2efg="30"
value3ade="50"
value4tew="something else"
onemorevalue="192.168.1.0"
腳本代碼:
declare -a CfgData
CfgData=("value1abc" "value2efg" "value3ade" "value4tew" "othervalue" "onemorevalue")
COUNTER="0"
source MySourceFile
until [ $COUNTER == ${#CfgData[@]} ]; do
value=$[${CfgData[$COUNTER]}]
echo -ne "\\n${CfgData[$COUNTER]}=\"$value\""\\n\\n
let COUNTER+=1
done
腳本工作正常,直到包含除純數字(字母,空格,點,通常所有字符)之外的數據的值,在這種情況下:
value="randomcharacters" # Gives me "0"
value="something else" & value="192.168.1.0" # line XX: 192.168.1.0: syntax error: invalid arithmetic operator (error token is ".168.1.0")
我很確定我錯過了一些基本的東西,但我現在無法理解:P。
首先, $[...]
bash語法已過時,不應使用。
現在,它將其內容評估為算術表達式。 當您輸入字符串時,is被解釋為變量,並且其值再次被計算為算術表達式。 取消設置變量時,它的計算結果為零。
如果您輸入一個包含單個單詞的字符串,則這些規則會將其擴展為零。 如果放入一個包含多個單詞的字符串,則擴展失敗,因為單詞被解釋為變量,沒有中間算術運算符,這是一個錯誤。 這就是你所看到的。
你可能想要的是用value=${!CfgData[$COUNTER]}
替換行value=$[${CfgData[$COUNTER]}]
。
讓我補充一點,你的腳本可能會更好地編寫沒有索引,如
for varname in "${CfgData[@]}"; do
value=${!varname}
echo -ne "$varname=$value"
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.