2013-08-01 20 views
1

數組我想嘗試在bash這種方法讀取一個變量的值,似乎沒有簡單的方法來做到這一點。我在搞什麼的例子:從您的變量名

Var1=foo 
Var2=bar 
Var3= 

var3是故意留在我的測試未定義與此。

這些變量後,我用的東西最好是這樣的:

declare -a array=(Var1 Var2 Var3) 

for array_element in ${array[@]}; 
do 
    if [[ $array_element ]]; 
     then 
      echo "Element $array_element has content - true"; 
      echo "The value of $array_element is foo." 
      echo 
     else 
      echo "Element $array_element has no content - false"; 
      echo 
    fi 
done 

所需的最終結果後,我,看看我能做到這一點是,如果你有3個或30個可能的變量,它會告訴你數組元素是否有內容,然後輸出該特定的變量內容。在這種情況下,「foo」和「bar」。

  1. 定義一個變量
  2. 定義包括該變量只
  3. 檢查的名稱的數組,看是否定義數組內容(如果沒有它的設置 - 只要是空白或不)
  4. 然後輸出實際的數組元素的最初定義的值。

動態數組,排序的?一個基本的一堆

if [[ $Var1 ]] 
if [[ $Var2 ]] 
if [[ $Var3 ]] 

工作正常,但我想把它包裝到這樣的事情,如果我可以有更少的代碼重複。長期目標將是有變量中讀取,吐出任何被定義爲一個單獨的配置文件變量,然後火了針對動態內容的其他地方定義各種功能。所以,如果這可以做的工作,我在那裏有多達上面:

echo "The value of $array_element is foo." 

將與一堆的各種功能(替換),將採用富爲$ 1,本質上。但是這部分讓我陷入困境。上面的測試(不出所料)在所有True命中時都會如預期的那樣失敗,因爲它只是確認$ array_element的確是根據$ array的讀數設置的。我被困在如何獲得定義在$ array_element之上的內容。如果你在文件的任何位置拋出一個「echo $ Var1」,它也輸出預期的「foo」,而不管它在哪裏。

你能在bash做到這一點?我不認爲我曾經見過這樣的變量,而且我不確定是否在某些機械問題/ bash限制或查看它的邏輯問題上陷入困境。我一直在用它和一些方法,並沒有運氣,谷歌和堆棧溢出搜索已經幹了。謝謝你的幫助。

+0

[使用可變間接膨脹擊陣列擴展]的可能重複( http://stackoverflow.com/questions/12691121/bash-array-expansion-using-variable-indirection-expansion) – Barmar

回答

0

這是通過陣列循環的正確的方法,其可以包含空元素:

Var1=foo 
Var2=bar 
Var3= 
declare -a array=("$Var1" "$Var2" "$Var3") 

for ((i=0; i<${#array[@]}; i++)) 
do 
    array_element="${array[$i]}" 

    echo "processing [$array_element]" 

    if [[ $array_element ]]; 
     then 
      echo "Element $array_element has content - true"; 
      echo "The value of $array_element is foo." 
      echo 
     else 
      echo "Element $array_element has no content - false"; 
      echo 
    fi 
done 

OUTPUT:

processing [foo] 
Element foo has content - true 
The value of foo is foo. 

processing [bar] 
Element bar has content - true 
The value of bar is foo. 

processing [] 
Element has no content - false 
+0

我很接近,謝謝 - 但如何讓輸出顯示具體的初始變量? 'Var1的值是foo'。 – Lsrei

+0

請注意以下這行:「echo」處理[$ array_element]「',它將打印數組的所有值。請注意,您只能使用數字索引(如0,1,2等)獲取數組中的特定元素。 – anubhava

+0

在'echo'命令中用'Var $((i + 1))'替換'$ array_element'。 – Armali