使用帶有數字的變數運行時遇到一些麻煩..
這有效;
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 手冊中有關數組的部分,或者在網路上這裡