2017-03-02 55 views
0

我有問題評估字符串表達式在我的Bash腳本。這段代碼會查找連接的平板電腦的顯示尺寸,並將其存儲在$displaySize中。當調用echo $displaySize時,它迴響1280x800我的字符串比較有什麼問題?

displaySize=$($adb_env -s $usb shell wm size | awk '{print $3}') 
echo "$displaySize" 
fifteen="1920x1080" 
ten="1280x800" 
if [ "$displaySize" == "$fifteen" ] ; then 
    echo "Configuring a 15\"" 
    foo ; fi 
if [ "$displaySize" == "$ten" ] ; then 
    echo "Configuring a 10\"" 
    bar ; fi 

的代碼應該跳過的$fifteenif塊,並通過$tenif塊運行,但目前跳過兩者。我究竟做錯了什麼?

+0

你的代碼似乎第一行後書面工作。所以問題不在於你的if語句本身,而在於捕獲表達式和它的輸出。 (儘管有「富」與「酒吧」是不是真正明顯的命令。) – kojiro

+1

更換'回聲「$顯示尺寸」'和'聲明-p displaySize'得到一個什麼樣值參數實際上有一個清晰的概念。 – chepner

+0

'declare -p $ displaySize' returns':not foundnfig:line 121:declare:1280x800'。運行時不帶'$'返回'「eclare - displaySize =」1280x800「。這兩個回報都很奇怪。 – jagdpanzer

回答

5

你的變量包含一個文字回車(這就是爲什麼打印該字符當光標移回到行的開始)。將其刪除:

displaySize=${displaySize//$'\r'/} 

要明確地顯示它用於調試目的:

printf 'declareSize=%q\n' "$declareSize" >&2 

或者只是運行腳本之前運行set -x,這將產生這樣的日誌:

+ '[' $'1280x800\r' == 1920x1080 ']' 

..這個問題很明顯。