BASH變數名稱包含數字問題

BASH變數名稱包含數字問題

使用帶有數字的變數運行時遇到一些麻煩..

這有效;

sourceid_2="blah"
echo $sourceid_2

但這是行不通的;

sourceid_2="blah"
i=2
echo $sourceid_$i

任何想法如何解決這個問題?我嘗試不使用下劃線..但這沒有幫助。

我的最終目標是對 for i in {2..7} 循環中的變數進行一些操作..像這樣;

for i in {2..7}
do
echo $sourceid_$i
done

答案1

echo $sourceid_$i展開兩個單獨的變數:$sourceid_$i。執行您想要執行的操作的最簡單方法是使用間接參考:

sourceid_2="blah"
i=2
var=sourceid_$i
echo "${!var}"

但正如 @dave_thompson_085 指出的那樣,陣列通常是完成此類事情的更好方法:

declare -a sourceid
sourceid[2]="blah"
i=2
echo "${sourceid[i]}"

請注意,陣列是 bash 擴展,在更基本的 shell 中不可用。

答案2

您的問題不是包含數字的名稱(這可以正常工作),而是包含多變的。您可以使用eval(這很難做到正確並且很容易搞砸)或間接,就像x=source_$i; echo "${!x}"在這種情況下這是一個騙局名稱中帶有變數的 bash 數組其中SX已經自動放入相關清單中供您查看。

但如果您想要透過數字存取多個相關變量,則更好的是使用數組。這正是陣列的設計目的,讓它們更方便、更安全。要了解 bash 中的數組,請參閱您系統上的 bash 手冊中有關數組的部分,或者在網路上這裡

相關內容