For 循环遍历变量向量

For 循环遍历变量向量

我有一个 for 循环和 case 语句。 for 循环有相当多的元素列表,case 语句将分配一个一维数组或向量。这些值将在之后的 for 循环中使用。我有以下代码。

发生的情况是 for 循环仅针对向量中的第一个值执行此操作。例如,如果 f=C,则情况为“C”) isotope=(6012 6013);;

for n in $isotope:它仅循环 6012,而不循环 6013。与 f=Ce 相同的问题,它仅循环 58136,而不循环其余部分。

# loop through elements
for f in C Ce 
do
cd ${f}

case $f in 
   "Al") isotope=(13027) ;;
   "C")  isotope=(6012 6013);;
   "Ce") isotope=(58136 58138 58140 58142);;
esac

for n in $isotope

do

....# loop through elements
for f in C Ce 
do
cd ${f}

case $f in 
   "Al") isotope=(13027) ;;
   "C")  isotope=(6012 6013);;
   "Ce") isotope=(58136 58138 58140 58142);;
esac

for n in $isotope

do

....

感谢您的帮助

比尔森

答案1

在 Bash 和 ksh 中,引用不带索引 ( ) 的数组与引用带索引( )$foo的数组相同。获取数组所有元素的方法是使用特殊值( ) 进行索引,注意扩展需要加引号才能正常工作。0${foo[0]}@"${foo[@]}"

在 zsh 中,没有索引 ( $foo) 的扩展将给出所有非空值。

因此,假设您使用的是 Bash 或 ksh,之后isotope=(6012 6013),您需要

for n in "${isotope[@]}"; do
   ...

也可以看看:

答案2

除了数组变量的错误使用之外,我还看到了相同循环变量($f$n)的嵌套使用:

for f in ...
do
    for n in ...
    do
        for f in ...
        do
            for n in ...
            do

尽管这些循环可以工作,但每个循环变量的作用域并不限于其循环。一旦内部循环集结束,每个循环变量的值将保留为最后一个值集,而不是恢复为外部循环中设置的值。

如果不清楚,请尝试运行它并查看输出:

for a in 1 2
do
    echo; echo "Outer: $a"

    for a in y z
    do
        echo "Inner: $a"
    done

    echo "Out of inner loop: $a"
done

相关内容