forループとCaseステートメントがあります。 forループには多少大きな要素のリストがあり、Caseステートメントは1次元配列またはベクトルを割り当てます。この値は後で for ループで使用されます。次のコードがあります。
forループは、ベクトルの最初の値に対してのみこれを行います。たとえば、f = Cの場合「C」)isotope =(6012 6013);
for n in $isotope: 6013 ではなく 6012 だけを繰り返します。 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
インデックス()なしで拡張すると、null以外のすべての値が提供されます。
したがって、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