• 締切済み

if [ 条件式 ]とif[[ 条件式 ]]

シェルスクリプトでのif [ 条件式 ] と if [[ 条件式 ]] の違いについて教えてください。 以下のシェルスクリプトを実行すると、 意図したとおり、111 と出力されます。 =========▼▼(ここから)▼▼========= #!/bin/sh AAA=yes if [[ "$AAA" = [yY]* ]] then echo 111 else echo 222 fi =========▲▲(ここまで)▲▲========= 上記、スクリプト3行目の if [[ "$AAA" = [yY]* ]] の部分を if [ "$AAA" = [yY]* ] というように、角カッコ 1重にすると、 エラーは発生しませんが、 222と表示されます。 if [ 条件式 ] と if [[ 条件式 ]] の違いについて教えていただけないでしょうか。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

この書き方だと、Bsh系(bash,ksh,zsh等)ということでよいですね? [はtestコマンドの別名です。testコマンドは単独のコマンドです。 [[ は(forやif等と同種の)複合コマンドです。 http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html > [[ expression ]] > == 演算子と != 演算子が使われたとき、 演算子の右の文字列はパターンと解釈され、 後述のパターンマッチングで説明する規則に従ってマッチングが行われます http://linuxjm.sourceforge.jp/html/GNU_coreutils/man1/test.1.html > STRING1 = STRING2 > 両方の文字列が等しい とあるように、[[ではパターンマッチングが行われ、[では単純な文字列比較となります。 [[ では、Yesは 「yまたはYではじまる」というパターンに一致するので 0が返る → thenの方を実行 [では Yesと [Yy]* という文字列は一致しないので 1が返る → elseを実行 となります。 疑問があったら、まずはマニュアルを読みましょう。

関連するQ&A