私は bash スクリプトにかなり慣れていませんが、このスクリプトが期待どおりに機能しない理由を理解できないため、明らかにかなり基本的な理解が欠けています。問題を再現する簡単な例を作成しました。3つのフォルダーを作成し、3つのフォルダーを内部に作成しtest
、それぞれの内部にファイルをタッチすることになっています。
スクリプトは次のとおりです。
#!/bin/sh
DIR_LEVEL_1=("1" "2" "3")
for DIR_1 in ${DIR_LEVEL_1[@]}; do
mkdir $DIR_1
DIR_LEVEL_2=("$DIR_1/a" "$DIR_1/b" "$DIR_1/c")
echo $DIR_LEVEL_2
for DIR_2 in ${DIR_LEVEL2[@]}; do
mkdir $DIR_2
touch "$DIR_2/test"
done
done
私が抱えていた問題は、2 番目の for ループに入っていないことでした。そのエコーを入れたところ、スクリプトの出力が次のように 2 番目の配列が適切に作成されていないように見えます。
1/a
2/a
3/a
これは配列の最初の要素です。
これは、ネストされた for ループに注意を-xv
払っていないことを示しています (配列が思い通りに作成されなかったからだと思います)。
#!/bin/sh
DIR_LEVEL_1=("1" "2" "3")
+ DIR_LEVEL_1=("1" "2" "3")
for DIR_1 in ${DIR_LEVEL_1[@]}; do
mkdir $DIR_1
DIR_LEVEL_2=("$DIR_1/a" "$DIR_1/b" "$DIR_1/c")
echo $DIR_LEVEL_2
for DIR_2 in ${DIR_LEVEL2[@]}; do
mkdir $DIR_2
touch "$DIR_2/test"
done
done
+ for DIR_1 in '${DIR_LEVEL_1[@]}'
+ mkdir 1
+ DIR_LEVEL_2=("$DIR_1/a" "$DIR_1/b" "$DIR_1/c")
+ echo 1/a
1/a
+ for DIR_1 in '${DIR_LEVEL_1[@]}'
+ mkdir 2
+ DIR_LEVEL_2=("$DIR_1/a" "$DIR_1/b" "$DIR_1/c")
+ echo 2/a
2/a
+ for DIR_1 in '${DIR_LEVEL_1[@]}'
+ mkdir 3
+ DIR_LEVEL_2=("$DIR_1/a" "$DIR_1/b" "$DIR_1/c")
+ echo 3/a
3/a
したがって、最初のレベルのフォルダーのみが作成されます