2017-08-06 16 views
0

代碼:使用我的shell腳本++增加變盤點

website="https://www.test.com/" 
item_1="stuff" 
item_2="more-stuff" 

     while [1] 
     do { 
      for (i=1; $i<=3; i++) 
       do { 
        echo $website$item_$i & 
        sleep 2 
       } 
       done 
      } 
      done 

輸出我得到:

https://www.test.com/1 
https://www.test.com/2 

輸出我的願望:

https://www.test.com/stuff 
https://www.test.com/more-stuff 

我試圖遞增「item」變量通過使用$ i代替數字,所以我可以通過它們循環,但它沒有給我想要的結果。有沒有辦法讓這成爲可能?

+1

已經有一個答案:HTTPS://unix.stackexchange

,如果你使用一個數組來代替它可以是簡單得多。 com/questions/41406/use-a-variable-reference-inside-another-variable – kcats

+0

@kcats你能幫助我解決什麼問題嗎?我讀過它,但我不明白我應該改變什麼。 – Aaron

回答

3

使用item_x變量和inderect variable references

#!/bin/bash 

website="https://www.test.com/" 
item_1="stuff" 
item_2="more-stuff" 

while true; do 
    for ((i=1; i<=3; i++)); do 
     item=item_$i 
     echo $website${!item} 
     sleep 2 
    done 
done 

要創建間接變量的引用,首先我們要創建一個存儲我們想要的變量名的變量間接參照,因此:

item=item_$i 
# item stores the name of the variable we want to 
# indirectly reference, be it item_1, item_2, etc. 

現在我們有了想要在另一個變量中引用的變量的名稱,我們使用不正確的引用來檢索變量item的值,但是存儲在該變量中的變量的值是item_x

${!item} 

所以VAR item店,我們希望間接使用${!var}符號引用變量的名稱。

#!/bin/bash 

website=https://www.test.com/ 
items=(stuff more-stuff) 

# You can refer to each item on the array like this: 
echo ${items[0]} 
echo ${items[1]} 

while true; do 
    for item in "${items[@]}"; do 
     echo "$website$item" 
     sleep 2 
    done 
done 

也可以試試這個另一種方式:

#!/bin/bash 

website="https://www.test.com/" 
item[1]="stuff" 
item[2]="more-stuff" 

while true; do 
    for ((i=1; i<=3; i++)); do 
     echo $website${item[i]} 
     sleep 2 
    done 
done 
+0

不幸的是,我在這個例子中寫的方式比我實際有的小,我需要讓每個「item」成爲它自己的變量。 – Aaron

+0

@Aaron請參閱最新答案。 – archemiro

+1

@Aaron注意到你仍然可以像這樣引用數組中的單個項目:'$ {items [0]}','$ {items [1]}'等。 – archemiro