2013-12-07 184 views
1

我的bash腳本需要從屬性文件中讀取值並將它們分配給多個數組。陣列的數量也通過配置進行控制。我當前的代碼如下:將值分配給動態數組

limit=$(sed '/^\#/d' $propertiesFile | grep 'limit' | tail -n 1 | cut -d "=" -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') 
for ((i = 1 ; i <= $limit ; i++)) 
do 
    #properties that define values to be assigned to the arrays are labeled myprop## (e.g. myprop01, myprop02): 
    lookupProperty=myprop$(printf "%.2d" "$i") 
    #the following line reads the value of the lookupProperty, which is a set of space-delimited strings, and assigns it to the myArray# (myArray1, myArray2, etc): 
    myArray$i=($(sed '/^\#/d' $propertiesFile | grep $lookupProperty | tail -n 1 | cut -d "=" -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')) 
done 

當我嘗試執行上面的代碼,會顯示以下錯誤信息:

syntax error near unexpected token `$(sed '/^\#/d' $propertiesFile | grep $lookupProperty | tail -n 1 | cut -d "=" -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')' 

我相當肯定的問題是我聲明的方式「myArray $ i」數組。但是,我嘗試的任何不同方法都會產生相同的錯誤或不完整的結果。

任何意見/建議?

回答

2

你是對的,bash不承認構造myArray$i=(some array values)作爲數組變量賦值。一個解決辦法是:

read -a myArray$i <<<"a b c" 

read -a varname命令讀取從標準輸入數組,這是由「這裏」串<<<"a b c",提供和分配它VARNAME其中VARNAME可以像myArray的$結構我。因此,在你的情況下,命令可能看起來像:

read -a myArray$i <<<"$(sed '/^\#/d' $propertiesFile | grep$lookupProperty | tail -n 1 | cut -d "=" -f2- | seds/^[[:space:]]*//;s/[[:space:]]*$//')" 

上面允許分配。接下來的問題是如何讀出像myArray $ i這樣的變量。一種解決方案是這樣間接命名變量:

var="myArray$i[2]" ; echo ${!var} 
+0

謝謝! '讀-a myArray $ i <<<「a b c」'做了訣竅。 – user3078422