
条件が真か偽かをテストしたい。以下はbashスクリプトの例です。
#!/bin/bash
set -x
var=foo
if [[ $var==bar ]]
then
echo $var is bar
else
echo $var is not bar
fi
set +x
出力になると予想しましたが、foo is not bar
次のような出力を取得します。
foo is bar
デバッグ出力を表示している間、以下を使用して条件が評価されていることを確認しました-n
。
+ var=foo
+ [[ -n foo==bar ]]
+ echo foo is bar
foo is bar
+ set +x
優秀Bash 条件式のマニュアルページそれは言う
-n 文字列
文字列の長さがゼロでない場合は真です。
しかし、私は文字列の長さがゼロ以外ではなく、2つの文字列が互いに等しいかどうかに興味があります。
答え1
[[
の動作は、$var==bar
実際には2つの文字列を比較する条件式ではなく、単一の文字列(2つの等号文字を含む)であるために設計されたとおりです。[[ ... ]]
条件式ではない文字列のみを含むため、デフォルトはフラグを使用して-n
文字列の長さがゼロでないことを確認し、終了コードとして評価することです0
。しかし、それはあなたが望むものではないので、$ varがbarと同じかどうかを評価するには、==
演算子の周りにスペースを使用して条件式に置き換えます。
[[ $var == bar ]]
~から条件式マニュアルページ:
文字列1 ==文字列2
文字列1 = 文字列2
文字列が等しい場合は真です。 [[コマンドと組み合わせて使用すると、上記のパターンマッチングが実行されます(条件付き構成を参照)。
POSIX 準拠を保証するには、テストコマンドで '=' を使用する必要があります。