简单字符串比较在bash脚本中不起作用

时间:2012-12-08 09:05:33

标签: android bash

我有一个简单的bash脚本。

# Which display is HDMI ?
for i in `seq 0 $displayLoopCounter`
do
    name=$(adb shell cat /sys/devices/platform/omapdss/display$i/name)

    if [ "$name"=="hdmi" ] ; then
        echo "$name"
        hdmiDisplay="display$i"
    fi
done

我的scipt的输出:

dvi

hdmi

我正在使用 bash myscript.sh

运行脚本

display0是dvi

display1是hdmi

2 个答案:

答案 0 :(得分:2)

这是问题:[ "$name"=="hdmi" ] - 条件表达式根据它看到的参数数量进行某些测试。如果只有一个参数,就像你在这里一样,[如果字符串非空则返回true - 这里,无论$ name的值如何,表达式"$name"=="hdmi"将始终为非空。

你需要

if [ "$name" == hdmi ]; then ...

空白在shell语言中非常重要。

答案 1 :(得分:0)

您的问题在于==行中的if周围没有空格。这使得它成为单个参数表达式,bash联机帮助页指出:

  

1参数:当且仅当参数不为null时,表达式才为真。

如果您运行以下脚本(==周围没有空格):

#!/bin/bash
echo Hello >myfile0
echo fileData >myfile1
counter=1
for i in `seq 0 $counter`
do
    name=$(cat myfile$i)
    if [ "$name"=="fileData" ]; then
        echo $name
    fi
done
rm myfile[01]

您会看到输出包含HellofileData两行。将空格放入,您将只获得fileData,因为相同的联机帮助页指出:

  

3个参数:如果第二个参数是上面在CONDITIONAL EXPRESSIONS下列出的二元条件运算符之一,则表达式的结果是使用第一个和第三个参数作为操作数的二进制测试的结果。