私はbashスクリプティングには新しく、明らかに、このスクリプトが期待していなかった理由を理解できないので、かなり基本的な理解が欠けています。私は問題を再現した簡単な例を作りました。内側に3つのフォルダを持つ3つのフォルダを作成し、それぞれにファイルtest
をタッチすることになっています。ここでBashスクリプト、配列が期待どおりに作成されない
はスクリプトです:
#!/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ループに入っていなかったし、私はそのエコーに入れ、二番目の配列が正しく作成されていないように見えますスクリプトの出力は次のとおりです。
1/a
2/a
3/a
これは配列の最初の要素です。だから、唯一の作成(私が望んでいたように、アレイが作成されませんでしたので、私は推測?)それはループのためにそのネストされたの何の予告を取っていないです示しており、私はこれを取得-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
を実行している
最初のレベルのフォルダ
mkdir -p {1,2,3}/{a、b、c}; {1,2,3}/{a、b、c}/test –
@WilliamPursellを真にタッチする。私は適切に(配列の展開を引用することを含む)ループの例を残したかったのですが、私はループが手元の実際のタスクには不要であると述べていたはずです。 – kojiro