Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題104

問題104 ファイル名の長さの限界は?

ループを用いて実際にできる限り長いファイル名を作ってみればいいと思ったがそれをワンライナーに落とし込むのがやっぱりうまくいかなかった。yes を使えばよいということに思い至らなかった。

解答例は

yes | perl -nle 'print $_ x$.' | while read f && touch $f;do echo ${#f} && rm $f; done | tail -n 1

となる。yes とperl でy,yy,yyy,...という具合に1文字ずつ増える文字列を生成している。そのあとwhileでその文字列を読み込んでtouchでファイルを作り、echoで文字列の長さを出した後そのファイルを消している。touchに失敗したら直前のechoで出力された数値が作れるファイル名の最大長となるのでtailで出力すればいい。