Ansatzの備忘録

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

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

問題20 lsの出力をシェルの機能で

外部コマンドが使えない状況で /usr 直下にあるファイルとディレクトリの一覧を縦に出力する問題だった。 echo * が使えるということには気が付いたがそこから先ができなかった。正解例は

for i in $(cd /usr;echo *); do echo $i; done

である。for 文でうまくやるという発想がなかった。cd も echo もビルトインコマンドなので使っても問題ない。

別解として

for f in /usr/* ; do echo ${f##*/}; done

というのがあった。シェルの文字列を除去する機能をうまく使っている。/usr/* と書けばディレクトリ名が展開されるというのは知らなかった。