2010-07-07 76 views
2
INPUT=10  
OUTPUT_IN=20  
KEYWORD="IN"  
echo $OUTPUT_"$KEYWORD" 

它應該顯示20如何在shell腳本中加入2個變量?

主要是我期待產生變量名OUTPUT_IN

如何解決這個問題?

+0

*我如何解決這個* – mcandre 2010-07-07 13:15:37

+0

這樣的:EVAL newvar = \ $$ VARNAME – Tree 2010-07-07 13:18:34

回答

4

您可以使用猛砸間接這樣的:

INPUT=10  
OUTPUT_IN=20  
KEYWORD="IN"  
var="OUTPUT_$KEYWORD" 
echo "${!var}" 

但是,你應該使用數組或其他方法做你想要什麼。從BashFAQ/006

將參數中的變量名稱或任何其他bash語法通常是一個壞主意。它違反了代碼和數據之間的分離;因此這會讓你在錯誤,安全問題等方面走上滑坡。即使你知道你「是對的」,因爲你「知道並明白你在做什麼」,錯誤發生在我們所有人身上,而且它付出了代價尊重分離的做法,儘量減少他們可能有的損害程度。

除此之外,它也使您的代碼不明顯,不透明。

通常,在bash腳本中,根本不需要間接引用。一般來說,當人們不理解或不瞭解Bash陣列,或者沒有充分考慮其他Bash功能(例如功能)時,人們會考慮採用這種解決方案。

如果可能的話,你應該避免使用eval。從BashFAQ/048

如果變量包含一個shell命令時,shell會運行命令,你是否希望與否。這可能會導致意外的結果,特別是可以從不受信任的來源(如用戶或用戶創建的文件)讀取變量時。

擊4具有關聯數組,這將允許你這樣做?

array[in]=10 
array[out]=20 
index="out" 
echo "${array[$index]}"