INPUT=10
OUTPUT_IN=20
KEYWORD="IN"
echo $OUTPUT_"$KEYWORD"
它應該顯示20如何在shell腳本中加入2個變量?
主要是我期待產生變量名OUTPUT_IN
如何解決這個問題?
INPUT=10
OUTPUT_IN=20
KEYWORD="IN"
echo $OUTPUT_"$KEYWORD"
它應該顯示20如何在shell腳本中加入2個變量?
主要是我期待產生變量名OUTPUT_IN
如何解決這個問題?
您可以使用猛砸間接這樣的:
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]}"
eval newvar=\$$varname
*我如何解決這個* – mcandre 2010-07-07 13:15:37
這樣的:EVAL newvar = \ $$ VARNAME – Tree 2010-07-07 13:18:34