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