読者です 読者をやめる 読者になる 読者になる

なっく日報

技術やら生活やらのメモ

シェルスクリプトの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 (( ))

Bash変態文法最速マスター? - programmingによれば、(( ))は算術演算子だそう。

評価した式の結果が 0 なら返り値 1、それ以外の場合には返り値 0 となります

❯ (( 1 )) && echo 1
1

❯ (( 0 )) && echo 0

となる。

ちなみに$+commands[nodebrew]分岐の zsh っぽい書き方 - Qiitaをみて思い出しました(ちなみに自分の.zshrcでも使っていましたが、使い方が間違っていた模様。。)

コマンドがなければ0、あれば1を返します。

まとめ

積年の疑問が氷解してスッキリ。