【问题标题】:Reading a variable value from an array of your variable names从变量名数组中读取变量值
【发布时间】:2013-08-02 20:43:04
【问题描述】:

我想在 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. 然后输出数组元素的实际原始定义值。

动态数组,有点?一堆基本的

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 中做到这一点吗?我认为我以前没有见过以这种方式使用的变量,我不确定我是否遇到了一些机械问题/bash 限制或查看它的逻辑问题。一段时间以来,我一直在搞砸它和几种方法,但都没有运气,而且 Google 和 Stack Overflow 的搜索已经枯竭。谢谢你的帮助。

【问题讨论】:

标签: arrays bash variables sorting if-statement


【解决方案1】:

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

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

【讨论】:

  • 我很接近,谢谢——但是如何让输出显示特定的初始变量? The value of Var1 is foo.
  • 注意这一行:echo "processing [$array_element]" 正在打印数组的所有值。请注意,您只能使用数字索引(如 0、1、2 等)获取数组中的特定元素。
  • echo 命令中将$array_element 替换为Var$((i+1))
  • @Lsrei:如果这个答案帮助你解决了问题,请考虑将其标记为“已接受”,以便以后遇到类似问题的用户能够轻松看到。
猜你喜欢
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多