1

我有一个简单的 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

4

2 回答 2

2

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

你需要

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

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

于 2012-12-08T19:27:04.387 回答
0

您的问题在于您的行中没有==空格if。这使它成为bash联机帮助页声明的单参数表达式:

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

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

#!/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 个参数:如果第二个参数是上面在条件表达式下列出的二元条件运算符之一,则表达式的结果是使用第一个和第三个参数作为操作数的二元测试的结果。

于 2012-12-08T09:23:19.307 回答