パイプで繋いだwhile構文の条件にreadコマンドを使うと、すこし複雑な文字列を先に生成してから処理できる
実際のところ
なんのこっちゃと思うので、実例を一つ。
yes "$(seq 231 -1 16)" | while read i; do printf "\x1b[48;5;${i}m\n"; sleep .02; done # Make colorful gradients in your shell pic.twitter.com/ggWhI09ZP8
— Command Line Magic (@climagic) October 2, 2020
この例では色付き文字ですが、何日か跨ぎの日付だとかを先に生成してから渡すことができますね。
全部whileにするなり、forでやるなりという方法もありますが分離しといた方がメンテナンス性がいいですし、なによりUNIX WAYな感じになります。