簡體   English   中英

BASH將數組元素更改為變量

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

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