コードブロック
for line in `cat list` ;do echo $line done
のようなforループの処理でlistファイルをユニークにして出したいと思ったので、以下のように書いた。
for line in `sort -u list` ;do echo $line done
そこでふと「forで書けるならwhileでも書けるよね。」と思ったが、whileはdoneの後ろがファイル名からリダイレクトするので、
while read line ;do echo $line done < `sort -u list`
とは書けない。で、ちょっと考えると、これはtrコマンドが
tr -d '文字' input_file
ではなく、
tr -d '文字' < input_file
や
cat input_file | tr -d '文字'
と書かねばならないのと似ているなと思って、コードブロックならwhileで書けることに気づいた。
sort -u list | { while read line ;do echo $line done }
書いてみたところで、「{}はいらないのでは?」と思ったら案の定、動いた。
sort -u list | while read line ;do echo $line done
なんというか、自分の知識の浅さを知った次第。