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

私のスクリプトの出力:

dvi

hdmi

bash myscript.shを使用してスクリプトを実行しています

display0 は dvi です

ディスプレイ1はhdmiです

4

2 に答える 2

2

これが問題です: [ "$name"=="hdmi" ]-- 条件式は、引数の数に応じて特定のテストを行います。ここにあるように、引数が 1 つしかない[場合、文字列が空でない場合は true を返します。ここでは、$name の値に関係なく、式"$name"=="hdmi"は常に空ではありません。

あなたが必要

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

シェル言語では、空白は非常に重要です。

于 2012-12-08T19:27:04.387 に答える
0

==あなたの問題は、行の周りにスペースがないという事実にありますif。これにより、bashマンページに記載されている単一引数の式になります。

1 つの引数: 引数が null でない場合に限り、式は true になります。

次のスクリプトを実行した場合 ( の前後にスペースを入れないでください==):

#!/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]

Hello出力にとの両方の行があることがわかりますfileData。スペースを入れるfileDataと、同じマンページに次のように記載されているという理由だけで得られます。

3 つの引数: 2 番目の引数が上記の条件式の下にリストされている 2 項条件演算子の 1 つである場合、式の結果は、1 番目と 3 番目の引数をオペランドとして使用した 2 項テストの結果です。

于 2012-12-08T09:23:19.307 に答える