从变量名称数组中读取变量值

时间:2013-08-01 18:57:15

标签: arrays bash variables sorting if-statement

我想在bash中尝试这种方法,似乎没有直接的方法可以做到这一点。我搞砸的例子:

Var1=foo
Var2=bar
Var3=

Var3在我的测试中故意未定义。

在这些变量之后,我使用了理想的东西:

declare -a array=(Var1 Var2 Var3)

for array_element in ${array[@]};
do 
    if [[ $array_element ]];
        then 
            echo "Element $array_element has content - true";
            echo "The value of $array_element is foo."
            echo
        else 
            echo "Element $array_element has no content - false";
            echo
    fi
done

我想看到我能做到的最终结果是,如果你有3个或30个可能的变量,它会告诉你数组元素是否有内容,然后输出那个特定的变量内容。在这种情况下,“foo”和“bar”。

  1. 定义变量
  2. 定义一个仅包含变量名称的数组
  3. 检查定义的数组是否包含内容(如果已设置,则为空 - 或者是否为空白)
  4. 然后输出数组元素的实际原始定义值。
  5. 动态数组,有点?

    的基本组合
    if [[ $Var1 ]] 
    if [[ $Var2 ]] 
    if [[ $Var3 ]] 
    

    工作正常,但如果我能减少重复的代码,我想把它包装成这样的东西。长期目标是读取变量,吐出在单独的配置文件中定义为变量的任何内容,然后根据该动态内容触发其他地方定义的各种函数。所以,如果这可以起作用,我在上面的地方:

    echo "The value of $array_element is foo."
    

    将被一堆各种函数()取代,这些函数将使用foo作为$ 1。但是这部分让我陷入困境。我的测试(不出所料)在所有True命中都失败了,因为它只是肯定$ array_element确实是从$ array的读取中设置的。我坚持如何获得$ array_element下定义的内容。如果在文件中的任何位置抛出“echo $ Var1”,它也会输出预期的“foo”,无论它在何处。

    你能用bash做到吗?我不认为我之前已经看到过以这种方式使用的变量,而且我不确定我是否会遇到一些机械问题/重击限制或者看到它时的逻辑问题。我一直在使用它和一些方法一段时间没有运气,谷歌和Stack Overflow搜索已经枯竭。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

这是循环遍历可能包含空元素的数组的正确方法:

Var1=foo
Var2=bar
Var3=
declare -a array=("$Var1" "$Var2" "$Var3")

for ((i=0; i<${#array[@]}; i++))
do 
    array_element="${array[$i]}"

    echo "processing [$array_element]"

    if [[ $array_element ]];
        then 
            echo "Element $array_element has content - true";
            echo "The value of $array_element is foo."
            echo
        else 
            echo "Element $array_element has no content - false";
            echo
    fi
done

<强>输出:

processing [foo]
Element foo has content - true
The value of foo is foo.

processing [bar]
Element bar has content - true
The value of bar is foo.

processing []
Element  has no content - false