我想在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”。
动态数组,有点?
的基本组合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搜索已经枯竭。谢谢你的帮助。
答案 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