2015-09-05 161 views
-1

EDIT2:@glenn jackman我認爲這可以解決它,但它仍然在我的完整腳本錯誤。爲什麼它不工作?是否由於間接參考?Bash間接變量參考

#!/home/$current_user/Desktop/expect 
... 
    COUNTER=0 
     while [ $COUNTER -lt $num ]; do 
      let index=COUNTER+1 
      tmp=user_$index 
      echo "Changing Password for " ${!tmp} 
      echo ${!tmp} 
      sudo passwd ${!tmp} 
      expect -exact "[sudo] password for $current_user: " 
      send "$pass\r" 
      interact 
      expect -exact "New password: " 
      send "$password\r" 
      interact 
      let COUNTER=COUNTER+1 
     done 

編輯:的!或者/ $$用於調用其他變量中的變量。如果變量是字符串的一部分,我需要幫助。

我有一個關於Bash中間接變量引用的快速問題。

eval "\${user_$index\}" #First attempt 
echo \$${eval "{user_\$index}"} #Second attempt 

基本上我有一個名爲 「用戶_ NUM」 裏的NUM是一個整數幾個變量。每個變量都包含一個字符串值。我想通過調用該變量來調用該字符串值。但是,由於變量裏面有一個變量(num),我似乎無法得到它的工作。我已經通過Man頁面查看了Bash中的間接引用,但他們沒有提到其他變量內部的變量附加到字符串的情況。

TLDR:我的問題是你怎麼做:

$(var_$num) 
+0

可能重複[Lookup shell variables by name,indirect](http://stackoverflow.c om/questions/1694196/lookup-shell-variables-by-name-indirect) –

+0

'$ current_user'從哪裏來? – rici

回答

0

這個真的很尷尬在bash:您需要一個臨時變量來保存構建的變量名:

$ var_1=hello 
$ num=1 
$ tmp=var_$num 
$ echo ${!tmp} 
hello 

陣列更簡單

$ var=([1]=world) 
$ echo ${var[$num]} 
world 
+0

你能幫我弄清楚爲什麼整個腳本中的期望部分不工作?我認爲這會解決它。 – LockX

+0

殼牌和期望是不同的語言,所以你不能像這樣混淆它們。希望你的生產線:使用預期的控制結構,條件和算術。 –