bash中的字符串比较失败

a c*_*der 4 bash

我试图遍历一个字符串数组,并对其中一个值做一些不同的事情。字符串比较在每个元素上都失败。

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
Run Code Online (Sandbox Code Playgroud)

我也试过(结果相同):

if [ "$i"='green' ];
Run Code Online (Sandbox Code Playgroud)

if [ $i='green' ];
Run Code Online (Sandbox Code Playgroud)

if [ $i="green" ];
Run Code Online (Sandbox Code Playgroud)

以上各项的输出:

i('red') is equal to green
i('blue') is equal to green
i('yellow') is equal to green
i('green') is equal to green
Run Code Online (Sandbox Code Playgroud)

我在比较时做错了什么?

cho*_*oba 13

缺少空格。

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

你需要

[ "$i" = green ]
Run Code Online (Sandbox Code Playgroud)

甚至

[ green = "$i" ]
Run Code Online (Sandbox Code Playgroud)

这甚至适用于i=-n.

如果您不需要可移植到其他 shell,则可以在 bash 中使用双方括号。

[[ $i = green ]]
Run Code Online (Sandbox Code Playgroud)

不需要引号(实际上,在右侧它们具有特殊含义 - 它们防止扩展)。您也可以使用==代替=

  • @acoder:不需要引用`green`,没有特殊字符。 (2认同)

Ant*_*hon 5

您需要在=比较运算符周围留出空间:

if [ "$i" = "green" ];
Run Code Online (Sandbox Code Playgroud)