私のbashテスト[[条件付きデバッグ出力に-nが表示されるのはなぜですか?

私のbashテスト[[条件付きデバッグ出力に-nが表示されるのはなぜですか?

条件が真か偽かをテストしたい。以下は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 準拠を保証するには、テストコマンドで '=' を使用する必要があります。

おすすめ記事