Bashで文字列比較が失敗する

Bashで文字列比較が失敗する

文字列配列を繰り返しながら、値の1つに対していくつかの異なる操作を実行したいと思います。すべての要素に対して文字列比較が失敗します。

arr[0]='red'
arr[1]='blue'
arr[2]='yellow'
arr[3]='green'

## now loop through the above array
for i in "${arr[@]}"
do
        if [ "$i"="green" ];
        then
                echo "i('$i') is equal to green"
        else
                echo "i('$i') is not equal to green"
        fi

done

私も試しました(同じ結果):

if [ "$i"='green' ];

そして

if [ $i='green' ];

そして

if [ $i="green" ];

上記の各項目の出力:

i('red') is equal to green
i('blue') is equal to green
i('yellow') is equal to green
i('green') is equal to green

比較で私が何を間違っているのだろうか?

答え1

空白がありません。

[ $i="green" ]方法[ -n $i=green ]

あなたはする必要があります

[ "$i" = green ]

でも

[ green = "$i" ]

これにも当てはまりますi=-n

別のシェルに移植する必要がない場合は、bashで角括弧を使用できます。

[[ $i = green ]]

引用符は必要ありません(実際には右側に拡張を防ぐ特別な意味があります)。==代わりに使用することもできます=

答え2

=比較演算子の周囲にはスペースが必要です。

if [ "$i" = "green" ];

答え3

周囲のスペースが必要なのは、コマンドが渡す引数の数によって異なる操作を実行する=ためです。単一の引数()のみを渡す場合、文字列が空でない場合、結果はtrueです。[test[ "$i"=green ]

あなたのコードと出力が一致しません。あなたが投稿したコードに応じて、各色は次のようになります。i('colour') is equal to green

答え4

[ green = "$i" ]
printf "( '%s' ) is %.$?0sequal to green.\n" "$i" "not "

...それも動作します。

関連情報