2011-08-18 26 views
0

下面是一個示例腳本不工作我所期望的方式:我想要的輸出將我如何從另一個輸出在bash創建一個變量

#!/bin/bash 
for dynamic in a b c; do 
    myvar=$dynamic 

    export $myvar="hi" 

    echo $(eval "$myvar") 
    echo $dynamic 
done 

hi 

a 

hi 

b 

hi 

c 

有什麼建議嗎?我願意偏離這種方法,但我絕對希望能夠創建一個從算法輸出中命名的變量。在這種情況下,它只是一個for循環。

回答

0

它不是完全清楚,這是你要找的東西,但我覺得你想要的東西,如:

 
#!/bin/sh 

a=A 
b=B 
c=C 
for i in a b c; do 
     eval $i=value_$i 
     eval echo \$$i 
done 
echo $a # Prints "value_a" 
+0

是的先生。你釘了它。雖然我不需要上面的任何聲明,a = A等等......但這基本上就是我想要的。從字面上解釋$,然後評估那個加上$ i的回聲。非常聰明。謝謝。 – Kevin

2

以下是你的程序的修補程序。有兩件事你錯了: 第一個是你不需要'$'時聲明變量。 第二個是調用eval將myvar的內容視爲shell腳本。但是,您沒有將「hi」定義爲命令。

for dynamic in a b c; do 
    myvar=$dynamic 

- export $myvar="hi" 
+ export myvar="hi" 

- echo $(eval "$myvar") 
+ echo "$myvar" 
    echo $dynamic 
done 
+0

我想你錯過了這個問題的目的。我認爲OP需要類似於PHP的變量變量。 – dreamlax

6

eval有導致錯誤的傾向,所以儘可能避免它;在這種情況下,與${!metavariable}一起使用間接擴展要簡單得多:

#!/bin/bash 
for dynamic in a b c; do 
    myvar=$dynamic 

    export $myvar="hi" 

    echo ${!myvar} 
    echo $dynamic 
done 
相關問題