1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[ShellScript]test([)コマンドと[[コマンドの違いについて

Last updated at Posted at 2024-03-13

シェルスクリプトで使用することの多いtest([)コマンドと[[コマンドの違いについて、混同することが多いのでまとめてみました。

testコマンド([コマンド)

  • 以下の2通りの書き方のどちらでもOK

    • [ $# -lt 2 ]
    • test $# -lt 2
  • -o(OR)、-a(AND)で複数条件を指定できる

    • [ $# -lt 2 -o ! -e "$1" ]
  • 使用例

    • 第1引数で指定されたディレクトリが存在するか?
      • [ -d $1 ]
    • 第1引数で指定されたファイルが存在するか?
      • [ -f $1 ]
    • 第1引数の長さがゼロでないか?
      • [ -n $1 ]
    • 第1引数の長さがゼロか?
      • [ -z $1 ]
    • 第1引数の値が5と等しいか?
      • [ $1 -eq 5 ]
      • [ $1 = 5 ]
    • 他には、-ne(!=), -gt, -ge, -lt, -leといった比較演算子を利用可能。
    • =,!=はコマンドとして使用できるが、不等号は利用できない
  • 不等号を利用したい場合は、算術演算に用いられる((コマンドを用いる

    • 使用例
      • (( x > y ))
      • (( x >= y ))
    • ((コマンドはループカウンタの更新等にも用いることができる
      • (( COUNT++ ))

[[コマンド

  • bash,zsh等で使用できる。Bourne Shell(sh)では利用できないので注意

  • testコマンドとの違い

    変数展開時にワード分割されない

    • 変数名を""で囲わなくても良い

      $ name='hoge taro'
      $ [ $name = "hoge taro" ];echo $?
      -bash: [: too many arguments
      2
      
      $ [ "$name" = "hoge taro" ];echo $?
      0
      
      $ [[ $name = "hoge taro" ]];echo $?
      0
      

    パターンマッチが利用できる

    • なお、拡張正規表現を用いる場合は=~を利用する必要がある
      $ [[ abc = ab* ]];echo $?
      0
      
      $ [ abc = ab* ];echo $?
      1
      

    <,>が利用できる

    • ((コマンドと違い、<=,>=は利用できない

    &&,||が利用できる。

    • 複数条件を指定する際に、&&,||を利用できるが、testコマンドで使用する-a,-oは利用できない

まとめ

基本的に、bash,zsh環境では[[コマンドを用いたほうが便利そうだと感じました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?