ぐるっとぐりっど

日曜プログラマがいろいろ試してみたことを、後の自分のためにまとめておく場所

シェルスクリプトが捗る!bashのコマンド置換を入れ子にする1の方法!

今までBourneシェル派だったから、bashシェルスクリプトを書くってことがなくて知らなかったんだけど、bashではコマンド置換に、従来の

`コマンド`

によるコマンド置換だけでなくて、

$(コマンド)

という書き方ができるらしい。

これのどこがうれしいのかというと、入れ子にできるということ

たとえば、grepで-Aオプションで該当行+COUNT行取得し、かつ最後の1組しか取得したくないというときに、従来方式だと入れ子にできないから

COUNT=$1
COUNT_ADD_1=`expr ${COUNT} + 1`
result=`grep -A ${COUNT} target_word target_file | tail -${COUNT_ADD_1}`

というような回りくどいことを書かないといけなかったところが、

COUNT=$1
result=$(grep -A ${COUNT} target_word target_file | tail -$(expr ${COUNT} + 1))

とシンプルにかけてしまう。

これは便利だ。

しかもbashなら

$(())

で、四則演算もできてしまうので、exprもいらず、

result=$(grep -A $1 target_word target_file | tail -$(($1 + 1)))

で済んでしまう。

なんとシンプル、すごいぞbash!!