bash 中的字符串比较失败

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

我也尝试过(结果相同):

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.

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

[[ $i = green ]]

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

答案2

=比较运算符周围需要空格:

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

答案3

需要在 周围留有空格的原因=[test命令根据您传递的参数数量执行不同的操作。当您仅传递单个参数 ( [ "$i"=green ]) 时,如果字符串非空,则结果为 true。

您的代码和您的输出不匹配:鉴于您发布的代码,每种颜色都应该导致i('colour') is equal to green

答案4

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

...也可以。

相关内容