シェルスクリプトのif文で見かける[と[[と((の違い
シェルスクリプト(というか↓はzshだけの文法も含まれますが)のif文でいろんな書き方が出てきてワケワカメ状態を脱したのでメモ。
これらの違いは何?
a='hoge' if [ "$a" = 'hoge' ]; then echo 'if [' fi if [[ "$a" == 'hoge' ]]; then echo 'if [[' fi if (( $+commands[nodebrew] )); then echo 'if ((' fi
答え
if [ ]
これはいつものやつ。
if [[ ]]
test と [ と [[ コマンドの違い - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blogによれば、[
の高機能版だそう。
変数展開等もダブルクォート不要だったり。
こちらを使っておいたほうが間違いない。
if (( ))
https://sites.google.com/a/tatsuo.jp/programming/Home/bash/hentai-bunpou-saisoku-masuta#TOC--6によれば、(( ))
は算術演算子だそう。
評価した式の結果が 0 なら返り値 1、それ以外の場合には返り値 0 となります
❯ (( 1 )) && echo 1 1 ❯ (( 0 )) && echo 0
となる。
ちなみに$+commands[nodebrew]
は
分岐の zsh っぽい書き方 - Qiitaをみて思い出しました(ちなみに自分の.zshrcでも使っていましたが、使い方が間違っていた模様。。)
コマンドがなければ0、あれば1を返します。
まとめ
積年の疑問が氷解してスッキリ。