単純なシェルスクリプトを1行に圧縮する方法は?

単純なシェルスクリプトを1行に圧縮する方法は?

私の友人が一行のコードに変換したい素晴らしいシェルスクリプトを作成しました。変換して実行した後、期待どおりに機能しないことがわかりました。奇妙なエラーはありません。私は何か間違っています。以下は前後のコードです。

今後

folders=(hydra1)
num=1
while :
do
for i in ${folders[@]}
do
if [ ! -d $i ]
then
mkdir $i
mkdir hydra$num
folders+=(hydra$num)
((num++))
fi
done
sleep 0.1
done

後ろに

while :; do for i in ${folders[@]}; do if [ ! -d $i ]; then mkdir $i; mkdir hydra$num; folders+=(hydra$num); ((num++)); fi; done; sleep 0.1; done

ところで、それが何であるか疑問に思うなら、フォルダを削除するときに自分で複製するフォルダを作成する小さなウイルスです。デスクトップで実行すると良いと思います。

答え1

変数の初期化は省略されます。空の場合、${folders[@]}forループは入力されません。

答え2

folders=(hydra1); num=1; while :; do for i in ${folders[@]}; do if [ ! -d $i ]; then mkdir $i; mkdir hydra$num; folders+=(hydra$num); ((num++)); fi; done; sleep 0.1; done

関連情報