要讀取變量的值,你可以使用間接:${!var}
:
#! /bin/bash
j=1
val=get_5
var=SAMPLE${j}_CHIP
declare "$var"="$val"
echo "${!var}"
的問題是把這些變量中獲得的價值。
我用上面的聲明,和已知的選項有:
declare "$var"="$val"
printf -v "$var" '%s' "$val"
eval $var'=$val'
export "$var=$val"
最危險的方法是使用eval。如果var
或val
的內容可能由外部用戶設置,則已設置獲取代碼注入的方法。它今天看起來很安全,但是由於某種原因某人編輯了代碼之後,它可能會發生變化,給攻擊者一個「進入」的機會。
也許最好的解決方案是避免以上所有。
關聯數組
一種替代方法是使用關聯數組:
#! /bin/bash
j=1
val=get_5
var=SAMPLE${j}_CHIP
declare -A array
array[$var]=$val
echo "${array[$var]}"
相當低風險的,你會得到一個類似命名的指數。
平原陣列
但很顯然,最安全的辦法是用最簡單的解決方案:
#! /bin/bash
j=1
val=get_5
array[j]=$val
echo "${array[j]}"
全部完成,風險不大。
您打算在'bash'中使用變量上下文還是數組上下文嗎? – Inian