正規表現が使えるだけ?Linuxなどのbashのif文、括弧1つと括弧2つの違いとは。

スポンサーリンク




結論からいうと [ ] よりも [ [ ] ] の方が強化されています。

いつも「a composer」をお読みいただきありがとうございます。banba(@banba929)です。

最近はLinuxに触れる頻度が高く、よくシェルスクリプトを書きます。

if文を書く際、テストコマンド( [ ] )を使う方も多いのではないでしょうか。

僕もよくif [ ${a} = 2 ] のような感じで書いていました。が、やめました。

if [[ ${a} = 2 ]] こっちに変えました。こっちの方が便利な気がします。

今のところ、全て括弧2つ( [[ ]] )で記述していますが、不便に感じたことはありません。

どちらも条件の真偽を判定するためのものです。特に不満がないなら強力な方がいいですよね。

なぜ変えたのか、理由をぽつぽつ書き残しておこうと思います。

なぜ括弧2つにしたのか

[ ] と [ [ ] ] の違いとは

そもそも [ ] は testコマンドです。

それに対し、[ [ ] ] はbashに組み込まれている複合コマンドです。ifやforと同じようのようです。

[ [ ] ] はtestコマンドより、後発で登場したコマンドでtestコマンドの拡張として導入されたそうです。まあC→C++やjavaを見てわかるように基本的に後発の方が便利にはなってますよね。速さはわからないですが。

なのでまあ、後発のものを使うというのは当たり前っちゃ当たり前ですね…

変数をダブルクォーテーションで括らなくて良い(” “)

testコマンド( [ ] )の場合、ダブルクォーテーションで括らないと予想していなかったエラーが起きることがあります。変数に入れてある文字列の間に空白があったりするとエラーになったような…

 

こんな感じですね。真になるべきif文ですが、画面にはエラーが出ています。

これを[ [ ] ] に変更するだけで動きます。

こんな感じですね。ちゃんと出力されるべきところが出ています。

知らずにtestコマンド( [ ] )を使用して、エラーに苦しめられたことがあります。中括弧( { } )でくくれば大丈夫だと思っていました。

※中括弧( { } )は絶対必要らしいです、変数がどこまでか明確にするため?ですかね。

正規表現が使える

testコマンド( [ ] )って正規表現使えないんですよね。知った時は驚きました。

パターンマッチングを使用したくなることって多いと思います。

試しに数字が7桁続く文字列ならマッチするif文を書いてみます。

無事動かすことができました。正規表現を使用したい際は”${変数} =~ [正規表現]“とします。

もちろん通常のtestコマンド( [ ] )では使えません。

全然動かない。

testコマンド( [ ] )だとANDで処理を行う際は”-a”、ORの場合は”-o”を使っていたかと思いますが、[ [ ] ] の場合ANDは”&&”、ORは”||”になります。

多少書き方は変わる部分があります。慣れだと思いますがなんとなく僕はこっちの方が好きです。”-a”とか”-o”とかオプションなんかと混ざって少しわかりにくいんですよね。

まとめ

やはり基本的にプログラミングであったり、コマンドなどは新しい方が使いやすいですね。使い始めてからエラーも少なくなりましたし、正規表現は本当に便利です。

エラーでないように把握して書けよって話ではありますが…

if文は必ずといいほどよく書く処理です。testコマンド( [ ] )をよく書いている方は一度使ってみてはいかがでしょうか。

機能はtestコマンド( [ ] )より明らかに優れていると思います。なんせ拡張版ですから。

また何かあれば書き足していこうと思います。ありがとうございました。

スポンサーリンク