2011-03-08 33 views
4

我試圖確定每個系統中使用for循環的現有硬盤,如下所示,問題是當我嘗試使用下面的代碼設置變量時,我得到sda = true:找不到命令。什麼是正確的方法來做到這一點?如何在Linux中設置變量for循環

#!/bin/bash 
for i in a b c d e f 
do 
    grep -q sd$i /proc/partitions 
    if [ $? == 0 ] 
    then 
     sd$i=true 
    else 
     sd$i=false 
    fi 
done 
+0

'declare sd $ i = true' 所以有一個我發現這個。當我在函數中使用它時,變量在函數外部是空的。我如何解決這個問題? – scharacter 2011-03-09 19:20:39

+0

你會在這種情況下使用'export'。 (我已經更新了我的答案。) – mpontillo 2011-03-10 19:42:32

回答

3

你需要使用數組或declare

declare sd$i=true 
+0

非常感謝! – scharacter 2011-03-08 20:04:16

2

我想在這種情況下使用數組。例如:

$ i=a 
$ sd[$i]=true 
$ echo ${sd[a]} 
true 

至於另一個海報說,如果你想做到這一點沒有一個數組,可以改爲使用類似語法declare sd$i=true使局部變量。如果要製作全局變量,請使用export sd$i=true

+0

除非你使用Bash 4和關聯數組('declare -A sd'),否則索引將解析爲0(除非'a'是一個最終解析爲數字的變量)。 '因爲我在{a..f};請取消$ i; SD [I] = TRUE;完成; declare -p sd'將導致「'declare -a sd ='([0] =」true「)」'「(僅一個元素)。 – 2011-03-08 21:38:10

+0

@丹尼斯,謝謝你的提高。 (我正在用bash 4.1.5進行測試。) – mpontillo 2011-03-08 21:41:07