
シェルスクリプトでの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で質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) IFERROR(IF()IF())のような形の構文が作れません 2 2023/02/05 17:51
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
- UNIX・Linux 次のif文について意味を教えてください。 1 2022/11/27 16:55
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチ終了時にDOS窓を閉じるコ...
-
findstrでヒットした1行前の文...
-
ftpコマンドを実行すると「425 ...
-
make test って何をするための...
-
シェルの「:コマンドが見つか...
-
バッチファイル 文字列にスペ...
-
シェルスクリプト内のcdで、カ...
-
コマンドプロンプトをクリック...
-
ftpコマンド出力結果の取得
-
コマンドプロンプトとCygwinの違い
-
WSHで他のバッチを呼びその終了...
-
MFCで、FTPファイルの属性変更
-
フォルダ、ファイル操作に最適...
-
FTPの連続実行でフリーズする
-
コマンドプロンプトを最小化し...
-
Pythonで単純にファイルを結合...
-
VBA 特定文字含むファイル
-
シェルスクリプト(.sh)で、10進...
-
DOSプロンプト(cmd.exe)の標準...
-
CPRMでコピーしたDVDを再コピー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 文字列にスペ...
-
バッチ終了時にDOS窓を閉じるコ...
-
コマンドプロンプトをクリック...
-
make test って何をするための...
-
findstrでヒットした1行前の文...
-
シェルの「:コマンドが見つか...
-
ショートカットをデスクトップ...
-
ftpコマンドを実行すると「425 ...
-
バッチファイルを使ってテキス...
-
Pythonで単純にファイルを結合...
-
フォルダ、ファイル操作に最適...
-
シェルスクリプト内のcdで、カ...
-
コンピュータ名をファイル名に...
-
DOSコマンドに詳しい方、お知恵...
-
SSH接続でwindowsサーバのコマ...
-
FTPの連続実行でフリーズする
-
ftpコマンド出力結果の取得
-
バッチファイルについて教えて...
-
2つ目の「pause」は無効?
-
バッチファイルでのMACアドレス...
おすすめ情報