2014-01-27 145 views
1

为什么以下不工作?我所要做的就是执行一个adb命令,如果响应中包含某个字符串,则对其进行处理。Bash脚本 - 参数太多

我不断收到一个错误[; too many arguments

VARIABLE=$(adb devices); 
if [ "$VARIABLE" == *list of attached* ]; then 
    echo "adb command worked"; 
fi 

任何想法?

+0

在另一方面:命令'亚行devices'返回的话'设备列表attached',不'attached'的名单。所以你的'if'语句可能总是返回false。 – anishsane

回答

5

尝试引用内部[[ and ]]参数:

VARIABLE="$(adb devices)" 
if [[ "$VARIABLE" == *"list of attached"* ]]; then 
    echo "adb command worked"; 
fi 

==需要在左右两侧单独的参数。当您使用[ "$VARIABLE" == *list of attached* ]时,*list==之后的第一个参数,其余参数被视为额外参数。

+1

'adb devices'可能也会返回一个好的退出码,在这种情况下'if adb devices>/dev/null 2>&1;那么..'会是这样做的正确方式(但不是提问者的方式)。 –

1

你可以或者尝试使用bash的二进制运算符=~做正则表达式匹配:

VARIABLE="$(adb devices)" 
if [[ $VARIABLE =~ list\ of\ attached ]]; then 
    echo "adb command worked" 
fi 
+0

术语提示:通配符与_globbing patterns_相关联 - 这是OP使用的功能。 '=〜'运算符用于_ regular expression_-matching。 – mklement0

+0

@ mklement0你是对的。已更新帖子以避免混淆。 –