Android linux shell-can';t将字符串与:adb shell getprop ro.product.brand进行比较
这真的很奇怪。。。 在我的linux shell中,我无法让这个测试结果为真,我也不知道为什么Android linux shell-can';t将字符串与:adb shell getprop ro.product.brand进行比较,android,linux,bash,shell,adb,Android,Linux,Bash,Shell,Adb,这真的很奇怪。。。 在我的linux shell中,我无法让这个测试结果为真,我也不知道为什么 #!/bin/bash a=$(adb shell getprop ro.product.brand) adb shell getprop ro.product.brand if [ "$a" == "Huawei" ]; then echo "Success" else echo "Failed" fi 脚本仅输出: Huawei Failed 鉴于本脚本: b=$(whoami) whoami
#!/bin/bash
a=$(adb shell getprop ro.product.brand)
adb shell getprop ro.product.brand
if [ "$a" == "Huawei" ]; then
echo "Success"
else
echo "Failed"
fi
脚本仅输出:
Huawei
Failed
鉴于本脚本:
b=$(whoami)
whoami
if [ "$b" == "amo" ]; then
echo "Success"
else
echo "Failed"
fi
……产出:
amo
Success
有人能帮我理解吗
我已经尝试通过管道切割或sed在$a中切割空格或换行符,但我得到了相同的结果…我建议将此作为删除前导/尾随空格的一种方法:
# Trims $1
# If $2 supplied, assigns result to variable named $2
# If $2 not present, echoes the value to stdout
trim()
{
if
[[ $1 =~ ^[[:blank:]]*(.*[^[:blank:]])[[:blank:]]*$ ]]
then
local result="${BASH_REMATCH[1]}"
else
local result="$1"
fi
if
(( $# > 1 ))
then
printf -v "$2" %s "$result"
else
printf %s "$result"
fi
}
此函数不使用外部程序,因此开销较低
也许可以快速解释一下正则表达式
^[[:blank:]]*(.*[^[:blank:]])[[:blank:]]*$
- 它匹配所有的前导和尾随空格(这并不奇怪)
- 在中间,它匹配以非空结尾的任何字符串,并将其保存为子表达式,以便使用
BASH\u REMATCH
- 如果没有为中间部分的结尾指定“非空”字符,贪婪的
将吃掉所有内容,直到字符串结束,包括尾随空格*
- 另一方面,
肯定以非空开头,因为贪婪的首字母*
只有在遇到非空时才会停止[[:blank:][]*
根据您的需要,您也可以使用
[[:space:][]
而不是[[:blank:][]
(此处解释的差异:)。基本上,[[:blank:][]
匹配制表符和空格,[:space:][]
还匹配换行符、回车符和其他一些字符。您绝对确定字符串不包含尾随空格或换行符吗?这似乎是这种情况下可能出现的问题……我想是的。请参阅下面的帖子。尝试以下操作:echo“${#a}
。这将打印变量值中的字符数,因此您可以验证是否没有任何错误(例如未显示不可打印的字符,但在比较字符串时将其考虑在内)。这里确实有些错误:字符数是7,虽然“华为”只有6个-即使在使用了下面帖子中的修剪功能后也是如此。有趣的是,如果我只是执行$a
,我会得到消息:/test.sh:line 21:$'Huawei\r':找不到命令
嘿,谢谢,我确实需要使用[:space:]
而不是[:blank:][]
。这很有效!