我有一个 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