2011-03-08 107 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