2017-03-02 54 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 ']' 

..这个问题很明显。