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?

More than 5 years have passed since last update.

bash/条件式の例/[ , ] , test , [[ , ]] の違い

Posted at

なんとなく使っているけど、よくわかっていないこと, [ ] / test / [[ ]] の違い

1.前提

 [ 外部コマンド・・・実体は、/usr/bin/[
 test 外部コマンド・・・実体は、/usr/bin/test
 [[ bashの内部コマンド

結論から言えば、条件式は

 [[ ]] を使って、 == != < > <= >= とする
 [ ] は、文字列を対象に、== != か、
 整数を対象に -eq -ne,,, だけ使うということだ。

2.[ (test) と [[ の違い

      [ test  [[ ]]
文字列 =   ○    ●
文字列 !=  ○    ●
文字列 <   ▲    ●
文字列 >   ▲    ●

整数  −eq ○    △
整数  −ne ○    △
整数  −lt ○    △
整数  −gt ○    △

[ test のハマリポイント

▲ [ “a” > “b” ] とすると、[ コマンドを引数”a”で動かして、
その、リダイレクト出力が“b”になる。
その結果、ファイル b が作成される。

▲ [ “a” < “b” ] とすると、[ コマンドを引数”a”で動かして、
その、リダイレクト入力が“b”になる。
ファイル b があれば、なんか動いてしまう。
ファイル b がなければ、ファイルbがないとエラーになる。

△ [[ -eq -ne -lt -get ]]は、整数に対してだけ正しく
文字列を評価した場合は、想定外動作をする(エラーMSGもない)
   文字列1 −eq 文字列2 ・・・ 無条件にTRUE
   文字列1 −以外 文字列2 ・・・ 無条件にFALSE

● [[ = == != < > ]]は、文字列・整数のいずれにも想定動作する

3.検証結果

[ test #文字列

$ [ "a" = "a"  ] && echo "ok"
ok
$ [ "a" != "a" ] && echo "ok"
$ [ "a" = "b"  ] && echo "ok"
$ [ "a" != "b" ] && echo "ok"
ok
$ [ "a" < "b" ] && echo "ok"
-bash: b: そのようなファイルやディレクトリはありません

[ test #整数

$ [ 1 = 1   ] && echo "ok"
ok
$ [ 1 != 1  ] && echo "ok"
$ [ 0 -lt 1 ] && echo "ok"
ok
$ [ 0 < 1 ] && echo "ok"
-bash: 1: そのようなファイルやディレクトリはありません

[[ ]] #文字列

$ [[ "a" = "a"  ]] && echo "ok"
ok
$ [[ "a" != "a" ]] && echo "ok"
$ [[ "a" != "b" ]] && echo "ok"
ok
$ [[ "a" == "a" ]] && echo "ok"
ok
$ [[ "a" < "a"  ]] && echo "ok"
$ [[ "a" < "b"  ]] && echo "ok"
ok
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?