
シェルスクリプトでの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 [[ 条件式 ]] の違いについて教えていただけないでしょうか。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
この書き方だと、Bsh系(bash,ksh,zsh等)ということでよいですね?
[はtestコマンドの別名です。testコマンドは単独のコマンドです。
[[ は(forやif等と同種の)複合コマンドです。
http://linuxjm.sourceforge.jp/html/GNU_bash/man1 …
> [[ expression ]]
> == 演算子と != 演算子が使われたとき、 演算子の右の文字列はパターンと解釈され、 後述のパターンマッチングで説明する規則に従ってマッチングが行われます
http://linuxjm.sourceforge.jp/html/GNU_coreutils …
> STRING1 = STRING2
> 両方の文字列が等しい
とあるように、[[ではパターンマッチングが行われ、[では単純な文字列比較となります。
[[ では、Yesは 「yまたはYではじまる」というパターンに一致するので 0が返る → thenの方を実行
[では Yesと [Yy]* という文字列は一致しないので 1が返る → elseを実行
となります。
疑問があったら、まずはマニュアルを読みましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチ終了時にDOS窓を閉じるコ...
-
コマンドプロンプトをクリック...
-
バッチファイル 文字列にスペ...
-
make test って何をするための...
-
ftpコマンド出力結果の取得
-
findstrでヒットした1行前の文...
-
シェルからpsqlコマンドでトラ...
-
AccessVBAで実行時間を指定する...
-
ショートカットをデスクトップ...
-
コマンドプロンプトでファイル...
-
シェルスクリプト(.sh)で、10進...
-
バッチファイルでのMACアドレス...
-
CPRMでコピーしたDVDを再コピー...
-
DOSコマンドで指定日数よりも過...
-
バッチファイル
-
シェルスクリプトでwhileを用い...
-
バッチえファイルを編集するに...
-
ftpコマンドを実行すると「425 ...
-
Bシェルで配列を使いたいのです...
-
bashからFTPコマンドのステータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 文字列にスペ...
-
バッチ終了時にDOS窓を閉じるコ...
-
コマンドプロンプトをクリック...
-
make test って何をするための...
-
findstrでヒットした1行前の文...
-
AccessVBAで実行時間を指定する...
-
SSH接続でwindowsサーバのコマ...
-
DOSコマンドに詳しい方、お知恵...
-
シェルの「:コマンドが見つか...
-
ショートカットをデスクトップ...
-
フォルダ、ファイル操作に最適...
-
ftpコマンドを実行すると「425 ...
-
ftpコマンド出力結果の取得
-
バッチファイルでのMACアドレス...
-
DOSコマンドで指定日数よりも過...
-
2つ目の「pause」は無効?
-
バッチファイルでdiskpart.exe...
-
バッチえファイルを編集するに...
-
シェルスクリプト内のcdで、カ...
-
Pythonで単純にファイルを結合...
おすすめ情報