我在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
代码应跳过$fifteen
if
块并浏览$ten
if
块,但它目前会跳过这两个块。我做错了什么?
答案 0 :(得分:5)
您的变量包含一个文字回车符(这就是为什么在打印此字符时光标会移回到行的开头)。要删除它:
displaySize=${displaySize//$'\r'/}
为了调试目的,要明确地显示它:
printf 'declareSize=%q\n' "$declareSize" >&2
或者在运行脚本之前运行set -x
,这将生成如下日志:
+ '[' $'1280x800\r' == 1920x1080 ']'
......使问题显而易见。