1

我想在 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 的搜索已经枯竭。谢谢你的帮助。

4

1 回答 1

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
于 2013-08-01T19:12:06.140 回答